弹出视图时传递参数

时间:2014-06-21 01:40:12

标签: ios objective-c uiview uiviewcontroller

我正在构建一个ios应用,其中两个视图AB之间有导航。

导航模式是:

ViewController A >>> PushViewController >>> ViewController B

ViewController A <<< PopViewController <<< ViewController B

我希望当B弹出回A时,A会相应地更新一些UI元素。例如,A视图控制器会显示一些带文字的标签,在B用户修改文字,当视图弹回时,我希望A更新并反映更改。

问题是:A如何知道它来自B的时间?以及A如何通过B传递数据以便更新内容?解决这类问题的好方法是什么?

谢谢

2 个答案:

答案 0 :(得分:6)

您可以使用NSNotificationCenter轻松完成此操作:

第一视图控制器:

// Assuming your label is set up in IB, otherwise initialize in viewDidLoad
@property (nonatomic, strong) IBOutlet UILabel *label;

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Add an observer so we can receive notifications from our other view controller
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(updateLabel:) name:@"UpdateLabel" object:nil];
}

- (void)updateLabel:(NSNotification*)notification
{
    // Update the UILabel's text to that of the notification object posted from the other view controller
    self.label.text = notification.object;
}

- (void)dealloc
{ 
    // Clean up; make sure to add this
    [[NSNotificationCenter defaultCenter]removeObserver:self];
}

第二视图控制器:

- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];

    NSString *updateLabelString = @"Your Text Here";        
    // Posting the notification back to our sending view controller with the updateLabelString being the posted object
    [[NSNotificationCenter defaultCenter]postNotificationName:@"UpdateLabel" object:updateLabelString;
}

答案 1 :(得分:2)

使用PopViewController

时,您可以使用委托将对象传递给父视图控制器

逐步使用委托click here进行演示。

此问题仅供您参考Question and answer