我是ios开发的新手并坚持这个问题:
我正在使用故事板并且有一个导航控制器vcA
,其中有一个TableView
,其中显示MutableArray
的一些数据(在viewdidload
中初始化同一类)。选择任何单元格后,会显示第二个视图控制器vcB
,其中包含TextField
和一个名为“添加到列表”的按钮。
我想要的是当我在TextField
中输入一些文字并按“添加到列表”按钮时,文本应该添加到上一个视图的数组中(显示在{{1}中) })当我点击TableView
导航栏上的“返回”按钮时,vcB
应显示更新的vcA
,其中包含新条目(位于列表顶部)。基本上我想将TableView
的{{1}}中的文本添加到vcB
数组中,然后在单击“返回”按钮后显示新数组。
我已经搜索了很多关于这个问题的内容,并且似乎发现委托和协议是实现预期结果的方法,但我无法理解授权。
答案 0 :(得分:13)
我有第二个视图控制器在此示例中将其自身呈现为模态:
在第二个视图控制器h文件中:
@protocol SecondViewControllerDelegate <NSObject>
- (void)addItemViewController:(id)controller didFinishEnteringItem:(NSString *)item;
@end
@interface SecondPageViewController : UIViewController <UITextViewDelegate>
{
NSString *previouslyTypedInformation;
}
@property (weak, nonatomic) IBOutlet UITextView *textView;
@property (nonatomic) NSString *previouslyTypedInformation;
@property (nonatomic, weak) id <SecondViewControllerDelegate> delegate;
在第二个视图中,控制器m文件确保合成属性并添加然后添加:
- (IBAction)done:(id)sender
{
NSString *itemToPassBack = self.textView.text;
NSLog(@"returning: %@",itemToPassBack);
[self.delegate addItemViewController:self didFinishEnteringItem:itemToPassBack];
//dismiss modal view controller here
}
然后在第一个视图中,控制器h文件将其设置为委托:
@interface FirstPageViewController: UIViewController <SecondViewControllerDelegate>
@property (nonatomic) NSString *returnedItem;
然后在第一个视图中控制器的m文件合成并添加方法:
- (void)addItemViewController:(SecondPageViewController *)controller didFinishEnteringItem: (NSString *)item
{
//using delegate method, get data back from second page view controller and set it to property declared in here
NSLog(@"This was returned from secondPageViewController: %@",item);
self.returnedItem=item;
//add item to array here and call reload
}
现在你有了返回内容的文字!您可以在第一个视图控制器的viewDidLoad中将字符串添加到数组中并调用
[self.tableView reloadData];
它应该有用。