Push View Controller из IBAction

В NavigationController у меня есть TabBarController. У меня есть собственный класс для NavigationItem TabBarController, который является подклассом UINavigationItem. Мой NavigationItem имеет TabBarButtonItem, который содержит UIButton. Я определил действие для этой кнопки. Мой вопрос: как я могу программно сделать толчок к другому представлению из этого действия? Как я могу получить в этом классе навигационный контроллер? Или существует другой способ для этого?

in .h:

@interface CustomNavigationItem : UINavigationItem
{
    IBOutlet UIBarButtonItem *barbtnApply;
    IBOutlet UIButton *btnApply;
}
@property(nonatomic,retain) UIBarButtonItem *barbtnApply;
@property(nonatomic,retain) UIButton *btnApply;
-(IBAction)actionApply:(id)sender;

@end

in .m:

@implementation CustomNavigationItem

@synthesize btnApply = _btnApply;
@synthesize barbtnApply = _barbtnApply;

-(IBAction)actionApply:(id)sender
{
    btnApply = sender;
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"" message:@"test" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alert show];
    //push to other view
}
@end

person Szilágyi Szabolcs    schedule 09.10.2012    source источник


Ответы (1)


Возможно, вам следует объявить делегата и вызвать его в методе кнопки.

в вашем CustomNavigationItem.h

@protocol CustomNavigationItemDelegate <NSObject>

-(void)shouldPushViewController;

@end

@interface CustomNavigationItem : UINavigationItem{
      id<CustomNavigationItemDelegate> delegate;
}

@property (nonatomic, assign) id<CustomNavigationItemDelegate> delegate;

в вашем CustomNavigationItem.m

@implementation CustomNavigationItem

@synthesize btnApply = _btnApply;
@synthesize barbtnApply = _barbtnApply;
@synthesize delegate;

 -(IBAction)actionApply:(id)sender
 {
     btnApply = sender;
     [self.delegate shouldPushViewController];
}
@end

в вашем viewcontroller.m

установить делегата

in .h

@interface MyViewController:UIViewController <CustomNavigationItemDelegate>

in .m

 mynavigationItem.delegate = self;

и реализовать метод

-(void)shouldPushViewController{
    [self.navigationController pushViewController:viewControllerToPass animated:YES];
}
person btype    schedule 10.10.2012
comment
Спасибо за этот код. Проблема в том, что у меня нет viewcontroller, у меня есть tabbarcontroller с этим элементом навигации... вот скриншот из моей раскадровки: postimage.org/image/sv6elwmcz - person Szilágyi Szabolcs; 10.10.2012
comment
затем реализуйте делегат, в котором вы хотите нажать другой контроллер представления, это был просто пример - person btype; 10.10.2012