0

所以目前我有一个 tableviewcontroller,如果发生某种情况,它会以模态方式呈现在 loginviewcontroller 上方,然后一旦用户按下单元格,标题应该传递给父视图控制器。

所以图片(A)是父视图 - 主视图,(B)是登录名,(C)是tableviewcontroller......

C 位于 B 之上,B 位于 A 之上,不是通过导航堆栈而是通过模态堆栈。所以 C 除了这个之外没有任何对 A 的引用:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self Login];
    [self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];
}

当用户按下一个单元格时,视图会直接转到 (A),因此从 (C) 到 (A) 会跳过 (B)。这就是我想要的......但问题是我如何将数据传递给(A)而不必再次实例化(A)?我的意思是再次实例化,它已经在应用程序启动开始时实例化,如果用户尚未登录,则 (B) 显示在 (A) 上。所以 (A) 总是加载,但我如何传递数据给它?

如果有更多信息需要提供,请通知我,我会尽快编辑。

编辑 我看了几个与这个相关的问题,我会使用 NSNotification 吗?还是委托?我试图同时使用这两种方法,但都没有真正起作用......我参考了我之前回答的关于委托的问题来实施委托解决方案,但我必须在 (A) 中实例化 (C)。但是我已经在 (B) 中实例化了 (C)。这是我要使用但没有使用的委托解决方案:Delegation。这是我尝试使用的 NSNotification 解决方案的链接:

把它放在你的父控制器中 viewDidLoad

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

    [self makeCallbacks];
    // get register to fetch notification
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(yourNotificationHandler:)
                                                 name:@"MODELVIEW DISMISS" object:nil];
}

//Now create yourNotificationHandler: like this in parent class
-(void)yourNotificationHandler:(NSNotification *)notice{
    str = [notice object];

}

将以下内容放在您的孩子班级中

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    NSLog(@"%@", cell.textLabel.text);
    // cell.textLabel.text logs this -> EDF ENRS
    [[NSNotificationCenter defaultCenter] postNotificationName:@"MODELVIEW DISMISS" object:cell.textLabel.text];
    [self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];
}

当我记录'str'(null)时打印

现在的问题是,当我稍后在 viewWillAppear 中将 str 记录在通知之外时,它一直返回 null ......当我在通知方法中记录 str 时,它只返回 null ......我稍后会尝试解决这个问题但是主要问题是我猜想使用 NSNotificationCenter 解决了。

4

2 回答 2

2

NSNotificationCenter 无法正常工作的问题在于它在 viewDidAppear 中声明。确保每次显示屏幕时,它都会出现并写入进行更改的地方,例如viewWillAppear

然后,在这个viewWillAppear方法中对 parentView 进行必要的更改。

此外,请确保在发布这些通知时在调用的方法中删除这些通知。

于 2013-07-26T12:10:24.270 回答
1

您的通知代码应该可以工作,除非您在某个时间点移除观察者。

委托也可以工作,您只需将委托传递给实例(A 传递给 B,B 传递给 C)。

块是另一种选择,类似于委托,但具有块类型而不是协议。再次,通过实例传递。


块可能是您最好的选择。如果多个项目对事件感兴趣并且这些项目不一定与事件的触发器相关联,则应使用通知。也就是说,通知是“最少代码选项”。

于 2013-07-24T22:56:22.410 回答