如何将 selectedSegmentIndex 发送到 Objective-c 中的 containerView?

How can I send selectedSegmentIndex to containerView in Objective-c?

我的 viewController 中有一个 containerView。我的 viewController 有一个 UISegmentedControl。

如何在此时发送此 selectedSegmentIndex selected 以及每次更改时发送?

我',尝试在下一个 class 中使用 属性 和 prepareForSegue 但这只在第一次加载时发送.. 谢谢!

然后 编辑 我得到:-[ViewController containerViewDidChangeSegmentIndex:]:无法识别select或发送到实例 0x7f8db16286d0

第一个ViewController(这包含一个select和一个containerView)

ViewController.h

    @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

容器ViewController.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

您可能想在 ContainerViewController.h 中创建一个方法,如下所示:

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

现在在您的 ContainerViewController.m 中实现此方法,如下所示:

- (void)containerViewDidChangeSegmentIndex:(NSInteger)updatedIndex{
    //Do whatever you want with your updated index
}

现在,在准备转场时,将对 ContainerViewController 的引用保存在 class 级变量中:

- (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 可能有不同的名称,请仔细应用更改。

编码愉快!