我这样做是为了改变一个按钮的状态。这是一个书签样式按钮。如果用户想要为详细视图添加书签,则可以单击星标。我想在根视图中获取信息。
这是我的detailview.m代码
- (IBAction)saveRow
{
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSString *save = cellNumber;
if ([buttonSave.titleLabel.text isEqualToString:@"Sync off"]) {
[prefs setValue:@"YES" forKey:save];
[buttonSave setTitle:@"Sync on" forState:UIControlStateNormal];
[buttonSave setBackgroundImage:[UIImage imageNamed:@"clicked.png"] forState:UIControlStateNormal];
}
else {
[prefs setValue:@"NO" forKey:save];
[buttonSave setTitle:@"Sync off" forState:UIControlStateNormal];
[buttonSave setBackgroundImage:[UIImage imageNamed:@"notclicked.gif"] forState:UIControlStateNormal];
}
// save
[prefs synchronize];
}
#pragma mark - View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
if ([[NSUserDefaults standardUserDefaults] boolForKey:cellNumber])
{
[buttonSave setTitle:@"Sync on" forState:UIControlStateNormal];
[buttonSave setBackgroundImage:[UIImage imageNamed:@"clicked.png"] forState:UIControlStateNormal];
}
else {
[buttonSave setTitle:@"Sync off" forState:UIControlStateNormal];
[buttonSave setBackgroundImage:[UIImage imageNamed:@"notclicked.gif"] forState:UIControlStateNormal];
}
但是在rootview中,我不知道该怎么做才能做同样的事情。 rootview是一个tableview。
有什么想法吗?
答案 0 :(得分:0)
您可以在DetailViewController
中定义RootViewController
将实施的委托。
@protocol DetailViewControllerDelegate <NSObject>
- (void)detailViewController:(DetailViewController *)controller didBookmarkSomthing:(Something *)something
@end
然后RootViewController
将实现此方法,并且从something
他将知道更新UI。
说过我通常在模型层中做这种事情 - 你改变模型的状态,然后告诉谁对这个变化感兴趣。
例如,假设您有一个书籍的表格视图 - 所以我的模型是Book
个对象的列表
现在,当用户点击其中一本书时,我会推送一个详细视图控制器,我们可以将其调用BookDetailViewController
来显示该书的信息。
当我按下这个控制器时,我将Book
对象传递给它,通常我创建一个特殊的init方法,它也得到Book
,如下所示:
- (id)initWithBook:(Book *)aBook
{
self = [super init];
if (self) {
self.book = aBook;
}
return self;
}
现在无论你在这个视图中做什么,控制器都应该感染Book
对象,例如,如果你想让用户书签一个书籍动作(只是一个例子..)那么你需要添加一个{{1}对isBookmarked
对象的属性告诉你书是否是书签
然后,当用户按下Book
中的书签按钮时,也可以更改模型 - BookDetailViewController
现在您的模型已更改,您需要更新有关此更改的人员,我希望通过通知执行此操作。
例如,Book对象将定义self.book.isBookmarked = YES;
,并在书签状态更改时发布此通知
您的BookDidChangedBookmarkStateNotification
会收听此通知并处理uI更改。