最近これを読んだ:
これは、2 つのコントローラー間の委任セットアップの概要を示しています。私が直面している問題は、コントローラー間にセグエがないことです。つまり、値が更新されたときにビューを変更したくありません。舞台裏で、値が実際に変更されたことを別のコントローラーに認識させたいだけです。
これは、上記のリンクから私がつまずいているステップです:
最後に行う必要があるのは、ViewControllerB をナビゲーション スタックにプッシュする前に、ViewControllerA がそのデリゲートであることを ViewControllerB に伝えることです。
ViewControllerB *viewControllerB = [[ViewControllerB alloc] initWithNib:@"ViewControllerB" bundle:nil]; viewControllerB.delegate = self [[self navigationController] pushViewController:viewControllerB animation:YES];
私はペン先を使用していませんし、セグエの準備がデリゲートを配線する正しい場所だとは思いません。デリゲートを配線することになっている他の場所はありますか?
ここに私のコードがあります:SettingsVeiwController、ユーザーがリフレッシュレートフィールドを更新したときに別のコントローラーに知らせたいです。
#import <UIKit/UIKit.h>
@protocol SettingsViewControllerDelegate <NSObject>
-(void) didUpdateRefreshRate:(NSString *)refreshRate;
@end
@interface SettingsViewController : UITableViewController <UITextFieldDelegate>
@property (weak, nonatomic) IBOutlet UITextField *refreshRateTextField;
@property (copy, nonatomic) NSNumber *refreshRate;
@property (weak, nonatomic) id <SettingsViewControllerDelegate> delegate;
@end
MainViewController、refreshRate が変更されたときに更新を取得したい、
@interface MainViewController ()
@end
@implementation MainViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
-(void) didUpdateRefreshRate:(NSString *)refreshRate {
NSLog(@"This was returned from SettingsViewController %@",refreshRate);
}
@end
MainViewController がデリゲートであることを SettingsViewController に伝えることを除いて、すべてが正しく機能するように設定されていると思います。
おそらく最も重要なのは、これがタブ付きアプリケーションであることです。MainViewController は 1 つのタブで、SettingsViewController は別のタブです。タブ付きアプリケーションを使用する場合、つまりタブ間で情報/データを渡す方法を設定するのに良い方法かもしれません。デリゲートを介して、それらをどこに配線するかを知る必要があるだけだと思います。