Iphone 在UINavigationController的每个导航项中设置按钮

Iphone 在UINavigationController的每个导航项中设置按钮,iphone,ios4,uinavigationcontroller,uibarbuttonitem,uinavigationitem,Iphone,Ios4,Uinavigationcontroller,Uibarbuttonitem,Uinavigationitem,我知道可以使用以下方法在导航项中添加自定义按钮: UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeInfoLight]; [infoButton addTarget:self action:@selector(showInfo:) forControlEvents:UIControlEventTouchUpInside]; // Add the info button to the

我知道可以使用以下方法在导航项中添加自定义按钮:

UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeInfoLight];
[infoButton addTarget:self
               action:@selector(showInfo:)
     forControlEvents:UIControlEventTouchUpInside];

// Add the info button to the navigation bar
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:infoButton];
[self.navigationItem setRightBarButtonItem:barButtonItem
                                  animated:YES];
[barButtonItem release];
但是,有没有一种方法可以在推送到导航堆栈的每个子视图中设置此按钮,而不必复制此代码

谢谢

按下“下一个”视图控制器时,可以添加以下代码:

nextVC.navigationItem.rightBarButtonItem = [self.navigationItem.rightBarButtonItem copy];
但是,您必须覆盖选择器(如果您希望按钮将数据发送到nextViewController对象):

按下“下一个”视图控制器时,可以添加以下代码:

nextVC.navigationItem.rightBarButtonItem = [self.navigationItem.rightBarButtonItem copy];
但是,您必须覆盖选择器(如果您希望按钮将数据发送到nextViewController对象):


您还可以将UIViewController子类化,然后重写:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
        UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeInfoLight];
        [infoButton addTarget:self action:@selector(showInfo:) forControlEvents:UIControlEventTouchUpInside];

        // Add the info button to the navigation bar
        UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:infoButton];
        [self.navigationItem setRightBarButtonItem:barButtonItem animated:YES];

        [barButtonItem release];
    }
    return self;
}

然后,当您创建一个新VC时,可以将该类子类化,而不是将UIViewController子类化,也可以将UIViewController子类化,然后重写:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
        UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeInfoLight];
        [infoButton addTarget:self action:@selector(showInfo:) forControlEvents:UIControlEventTouchUpInside];

        // Add the info button to the navigation bar
        UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:infoButton];
        [self.navigationItem setRightBarButtonItem:barButtonItem animated:YES];

        [barButtonItem release];
    }
    return self;
}
然后,当您创建一个新VC时,将该类作为子类,而不是
UIViewController