从第二个ViewController到第一个ViewController

时间:2012-08-10 10:54:00

标签: iphone objective-c ios uitableview uiviewcontroller

我有2个ViewControllers,在第一个 - TableView和第二个 - 按钮上有标签。当我点击第二个ViewController中的按钮时,我需要返回TableView并设置

cell.detailTextLabel.text

按钮上标签的文字。

要返回第一个视图我使用:

[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES];

但是如何将标签从第二个视图设置为:

cell.detailTextLabel.text

在第一个视图中?????

3 个答案:

答案 0 :(得分:2)

我会定义一个协议&在第二个视图控制器中委托

@protocol SecondViewController;

@interface SecondViewController : UIViewController

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

@end


@protocol SecondViewController <NSObject>
- (void)secondViewController:(SecondViewController *)controller didTappedOnButton:(UIButton *)button;
@end   

然后点击按钮时,请致电代表:

- (IBAction)buttonTapped:(UIButton *)sender
{
    // do somthing..

    // then tell the delegate about the button tapped
    [self.delegate secondViewController:self didTappedOnButton:sender];
}  

在您的第一个视图控制器中实现协议

@interface FirstViewController : UIViewController <SecondViewControllerDelegate>

当您按下第二个视图控制器时,将第一个设置为第二个委托:

- (void)someMethodThatPushTheSecondViewController
{
    SecondViewController *svc = [[SecondViewController alloc] init];
    [self.navigationController pushViewController:svc animated:YES];
    svc.delegate = self;
}  

实现委托方法,以便在按下按钮时收到通知

- (void)secondViewController:(SecondViewController *)controller didTappedOnButton:(UIButton *)button
{
    // do somthing after button tapped
    // you can get the button title from button.titleLabel.text
}

答案 1 :(得分:0)

要访问父类方法或属性,您必须实现协议,并使用它的委托。您可以使用在当前(父)类中创建的类对象来访问子类方法/属性。但是你想如何从子类访问父类实体?是的,实施协议。

或者新手方式:点击按钮后,将所需的值保存到NSUserDefaults中。然后,当您转到父类(viewController 1),离开viewWillAppear时,检查保存的值,如果它不是nil,则显示它。

答案 2 :(得分:0)

[self.navigationController popViewControllerAnimated:YES];