0

私はviewControllerにcontainerViewを持っています。私のviewControllerにはUISegmentedControlがあります。Objective-cでselectedSegmentIndexをcontainerViewに送信するにはどうすればよいですか?

この選択したselectedSegmentIndexをこの瞬間とこれを変更するたびにどのように送信できますか?

私はprepareForSegueで次のクラスのプロパティを試していますが、これは最初の読み込み時にのみ送信されます。 ありがとう!

その後編集私が取得しています: - [ViewControllerをcontainerViewDidChangeSegmentIndex:]:認識されていないセレクタがFirstViewController(これは選択とcontainerViewが含まれています)

ViewController.h

インスタンスに0x7f8db16286d0

を送りました

@interface ViewController : UIViewController 

@property (weak, nonatomic) IBOutlet UISegmentedControl *select; 
@property (weak, nonatomic) IBOutlet UIView *container; 

@property(nonatomic, assign) ContainerViewController * classLevelReference; 

@end 

ViewController.m

@interface ViewController() 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    [_select addTarget:self action:@selector(segmentChanged:) forControlEvents:UIControlEventValueChanged]; 
} 

- (void)segmentChanged:(UISegmentedControl *)segment{ 
    //since you've reference to your container view here, you can directly call its method here: 
    [self.classLevelReference containerViewDidChangeSegmentIndex:segment.selectedSegmentIndex]; 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
    //don't forget to check the segue id, if you've multiple segues 
    ContainerViewController *containerView = [segue destinationViewController]; 
    self.classLevelReference = self; 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

@end 

ContainerViewController.h

@interface ContainerViewController : UIViewController 

- (void)containerViewDidChangeSegmentIndex:(NSInteger)updatedIndex; 

@end 

ContainerView.m

@implementation ContainerViewController 

- (void)containerViewDidChangeSegmentIndex:(NSInteger)updatedIndex{ 
    //Do whatever you want with your updated index 
    NSLog(@"changing"); 
} 

@end 

答えて

1

あなたは、このようなあなたのContainerViewController.h方法を作りたいかもしれません:

@interface ContainerViewController:UIViewController 
//.....other implementation here. 
- (void)containerViewDidChangeSegmentIndex:(NSInteger)updatedIndex; 
@end 

今すぐあなたのContainerViewController.mに、このメソッドを実装このように:

01あなた、セグエの準備クラスレベルの変数であなたの ContainerViewControllerへの参照を保存で今
- (void)containerViewDidChangeSegmentIndex:(NSInteger)updatedIndex{ 
    //Do whatever you want with your updated index 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
    //don't forget to check the segue id, if you've multiple segues 
    ContainerViewController *containerView = [segue destinationViewController]; 
    self.classLevelReference = containerView; 
} 

最後FirstViewController.mで、セグメントインデックスの変更コンテナビューを伝えます。

- (void)viewDidLoad{ 
    //.....your other implementation here..... 

    //add a listener to your segment's value changed action 
    [youregements addTarget:self action:@selector(segmentChanged:) forControlEvents:UIControlEventValueChanged]; 
} 

- (void)segmentChanged:(UISegmentedControl *)segment{ 
    //since you've reference to your container view here, you can directly call its method here: 
    [self.classLevelReference containerViewDidChangeSegmentIndex:segment.selectedSegmentIndex]; 
} 

重要:あなたは、あなたのケースでContainerViewControllerFirstViewControllerに別の名前をしただけで、慎重に変更を適用することがあります。

ハッピーコーディング!

+0

ありがとうございます! classLevelReferenceはどんな型ですか? – user3745888

+0

'ContainerViewController * classLevelReference;' –

+0

私は警告を受け取りました: "Incompatibleポインタ型はFirstViewControllerからContainerViewControllerにasssignning" self.classLevelReference = self;私のアプリはNSInvalidArgumentExceptionでクラッシュします。containerViewDidChangeSegmentIndex:解決策は何か分かりますか? – user3745888

関連する問題