我的根视图控制器中有一个表,其中“添加”按钮映射到另一个视图控制器,该控制器具有输入列表名称的文本字段和保存按钮。该保存按钮被映射回主控制器。当数据传回主控制器时,它不会将该项添加到表中。
这是我的表视图控制器的viewDidLoad的样子:
- (void)viewDidLoad
{
[super viewDidLoad];
self.tableView.allowsMultipleSelectionDuringEditing = YES;
if (!self.listArray) self.listArray = [[NSMutableArray alloc] init];
[self.listArray addObject:@"New Item"];
[self.tableView reloadData];
[self updateButtonState];
}
这会将“New Item”添加到列表中并显示在表格中。但是当我从segue传递listname时,我可以看到日志条目“添加...”,但不会将该项添加到表中。这是从segue添加新项目的方法。
-(void) addList:(NSString *)listName
{
NSLog(@"Adding %@", listName);
[self.listArray addObject:listName];
[self.tableView reloadData];
}
准备segue
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
LSNewListViewController *sourceView = [segue sourceViewController];
LSMainViewController *destView = [segue destinationViewController];
[destView addList:[[sourceView listName] text]];
}
答案 0 :(得分:0)
尝试在“添加”视图控制器中设置协议,而不是使用故事板segue来推送另一个视图控制器。然后将“主”视图控制器设置为委托并处理添加。从那里你可以连接“添加”按钮来调用委托方法并弹出视图控制器。
@protocol LSNewListViewControllerDelegate;
@interface LSNewListViewController : UIViewController
@property (nonatomic, weak) id <LSNewListViewControllerDelegate> delegate;
@end
@protocol LSNewListViewControllerDelegate <NSObject>
@optional
- (void)didAddToList:(NSString*)item;
@end
@implementation LSNewListViewController
// Hooked up to the Add button in the storyboard (touchUpInside)
- (IBAction)addToListAction:(id)sender {
if ([self.delegate respondsToSelector:@selector(didAddToList:)]) {
[self.delegate didAddToList:[sourceView listName] text]];
}
}
@end
#import "LSNewListViewController.h"
@interface LSMainViewController : UIViewController <LSNewListViewControllerDelegate>
@end
@implementation LSMainViewController
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
LSNewListViewController *destView = [segue destinationViewController];
destView.delegate = self;
}
// Delegate method
- (void)didAddToList:(NSString*)item {
NSLog(@"Adding %@", listName);
[self.listArray addObject:listName];
[self.tableView reloadData];
[self.navigationController popViewControllerAnimated:YES];
}
@end