【问题标题】:split view controller update table view拆分视图控制器更新表视图
【发布时间】:2023-03-18 10:19:01
【问题描述】:

我正在使用拆分视图控制器。对于主人,我有导航控制器和表视图控制器作为根视图。有关详细信息,我将带有自定义视图控制器的导航控制器作为根视图。从 master 我选择 tableView 行并在详细信息视图中显示行详细信息。从详细信息视图中,我可以使用另一个具有模态 segue 的视图控制器来编辑该行的详细信息。问题是:如何在细节编辑视图(模态)中保存更改后刷新 tableView(主)。当我点击保存按钮时,-(IBAction) unwindEditRow:(UIStoryboardSegue *)segue(详细信息)被触发。

【问题讨论】:

  • 使用委托模式。
  • 我对 iOS/Objective-C 编程真的很陌生。这是我的第一天;)更详细的答案将不胜感激

标签: ios objective-c uitableview uiviewcontroller uisplitviewcontroller


【解决方案1】:

当特定事件发生时,您可以通过多种方式向 ViewController 发送消息。

第一种方法:使用委托模式。什么是委托? 委托是一种连接对象并帮助它们与其他对象进行通信的简洁明了的方法。换句话说,委托是针对 Objective-C 对象的约会服务。 :) 有一些有用的链接:Basic concepts in Objective-C, Writing your own custom delegate 以下是声明您的新协议的方式:

@protocol DetailViewControllerDelegate <NSObject>

-(void)itemHasBeenChanged:(id)edittedObject;

@end

在您的 DetailViewController 中声明您未来的委托:

@property (weak,nonatomic) MasterViewController <DetailViewControllerDelegate> *delegate;

在 MasterViewController.m 中实现itemHasBeenChanged: 方法:

  -(void)itemHasBeenChanged:(id)edittedObject{
    //editting logic goes here
  }

告诉我们的类实现DetailViewControllerDelegate 协议,这样它就可以通过行知道哪些函数可用:

@interface MasterViewController : UITableViewController <DetailViewControllerDelegate>

完成所有这些步骤后,您可以随时调用 DetailViewController 中的方法:

[self.delegate itemHasBeenChanged:yourObject];

Here is my example code on github

第二种方式

我们可以使用 NSNotificationCenter 作为自定义协议的替代方式。制作自定义协议和注册方法在大型项目中很难做到,而 NSNotificationCenter 可以让我们摆脱这种负担。 NSNotificationCenter 使用的主要方法是任何对象都可以向通知中心发送通知,同时任何其他对象都可以在该中心监听通知。

【讨论】:

  • 非常感谢。太客气了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多