-1

我这样做是为了改变按钮的状态。这是一个书签样式的按钮。如果用户想要为详细视图添加书签,他单击星号。我想在根视图中取回信息。

这是我的 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];
}

但是在根视图中,我不知道该怎么做才能做同样的事情。根视图是一个表视图。

有任何想法吗?

4

1 回答 1

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对象,例如,如果您想启用用户为图书操作添加书签(只是一个示例..),那么您需要向该对象添加一个isBookmarked属性Book来告诉您一本书是否是书签或不。
然后当用户按下BookDetailViewController更改模型中的书签按钮时 -self.book.isBookmarked = YES;

现在您的模型已更改,您需要更新想要了解此更改的人,我喜欢通过通知来执行此操作。
例如 Book 对象将定义BookDidChangedBookmarkStateNotification,并在书签状态更改时发布此通知。
RootViewController将收听此通知并处理 uI 更改。

于 2012-08-04T22:54:00.657 回答