-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

U で実装 するデリゲートを定義できますDetailViewControllerRootViewController

@protocol DetailViewControllerDelegate <NSObject>
- (void)detailViewController:(DetailViewController *)controller didBookmarkSomthing:(Something *)something

@end  

次に、RootViewControllerこのメソッドを実装しsomething、UI を更新する必要があることを認識します。

私は通常、モデルレイヤーでこの種のことを行うと言いました-モデルの状態を変更し、この変更に興味がある人に伝えます。
たとえば、書籍のテーブル ビューがあるとします。ここでのモデルはBookオブジェクトのリストです。
ユーザーが書籍の 1 つをタップすると、詳細ビ​​ュー コントローラーをプッシュし、それを呼び出してBookDetailViewController書籍の情報を表示します。
このコントローラーをプッシュすると、オブジェクトが渡されます。通常は、次のよう Bookに も取得する特別な init メソッドを作成します。Book

- (id)initWithBook:(Book *)aBook
{
    self = [super init];
    if (self) {
        self.book = aBook;
    }  
    return self;  
}

このView Controllerで何をしても、Bookオブジェクトに感染するはずです。たとえば、ユーザーがブックアクションをブックマークできるようにしたい場合(ほんの一例です..)isBookmarked、オブジェクトにプロパティを追加しBookて、ブックがブックマークかどうかを伝える必要がありますか否か。
次に、ユーザーがモデルの変更でブックマークボタンを押すと、BookDetailViewController同様に-self.book.isBookmarked = YES;

モデルが変更され、この変更について知りたい人を更新する必要があります。通知を使用してこれを行うのが好きです。
たとえば、 Book オブジェクトは を定義BookDidChangedBookmarkStateNotificationし、ブックマークの状態が変化したときにこの通知を送信します。この通知をリッスンし、uI の変更を処理します
RootViewController

于 2012-08-04T22:54:00.657 に答える