didSelectRowAtIndexPath:
の変更をリッスン/検出しviewController1
、この選択に基づいて の何かを変更したいと思いviewController2
ます。
どうすればこれを行うことができるのでしょうか?
didSelectRowAtIndexPath:
の変更をリッスン/検出しviewController1
、この選択に基づいて の何かを変更したいと思いviewController2
ます。
どうすればこれを行うことができるのでしょうか?
KVOを使用してください。
最初に ViewController1.h に @property を作成します。
@property (strong, nonatomic) NSIndexPath *selectedIndexPath;
ViewController1.m で:
@synthesize selectedIndexPath;
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath!=self.selectedIndexPath) self.selectedIndexPath = indexPath; //this will fire the property changed notification
ViewController2.m で、ViewController1 (つまり vc1) への参照が既にあると仮定して、viewDidLoad で Observer を設定します。
-(void)viewDidLoad
{
[super viewDidLoad];
[vc1 addObserver:self forKeyPath:@"selectedIndexPath" options:NSKeyValueObservingOptionNew context:NULL];
//other stuff
最後に、ViewController2 のどこかに次を追加します。
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
//inspect 'change' dictionary, fill your boots
...
}
イータ:
ViewController2 の dealloc でオブザーバーも削除する必要があります。
-(void)dealloc
{
[vc1 removeObserver:self forKeyPath:@"selectedIndexPath"];
...
}