uisegmentedcontrol对每个单元格执行相同的操作



我有一个分段控件,其中有两个单元格以编程方式定义。当我进入我的app,两个单元格执行相同的动作。第一个应该在Safari中打开一个网页,第二个打开一个图像并覆盖当前视图5秒。指针吗?

.m文件

@property UISegmentedControl *segment;
        - (void)viewDidLoad
    {
        UISegmentedControl *segment = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Publication", @"About", nil]];
        self.tableView.tableHeaderView = segment;
        [segment addTarget:self action:@selector(segmentPressed:) forControlEvents:UIControlEventValueChanged];

        [self.tableView registerClass:[UITableViewCell class]
               forCellReuseIdentifier:@"UITableViewCell"];
    }

    - (void)segmentPressed:(id)sender {
        if (_segment.selectedSegmentIndex ==0) {
         [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"******"]];
        }else if(_segment.selectedSegmentIndex ==1){
            UIImageView *imageView = [[UIImageView alloc] initWithFrame: CGRectMake(0, 0, 320, 480)];
            imageView.backgroundColor = [UIColor redColor];
            [imageView setImage: [UIImage imageNamed:@"MACSLoad@2x.png"]];
            [self.view addSubview: imageView];
            sleep(5);
            imageView.hidden = YES;
        }

    }

你得到这个结果是因为_segment是nil。您从未将创建的分段控件分配给属性,而是将其分配给局部变量。修改这一行

UISegmentedControl *segment = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Publication", @"About", nil]];

self.segment = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObjects:@"Publication", @"About", nil]];

另一种方法是,把这个属性全部去掉,让viewDidLoad的代码保持原样,然后改变这个

- (void)segmentPressed:(id)sender {
        if (_segment.selectedSegmentIndex ==0) {

,

- (void)segmentPressed:(UISegmentedControl *)sender {
        if (sender.selectedSegmentIndex ==0) {

除非您需要在其操作方法之外访问分段控件,否则没有理由创建该属性。在任何情况下,最好使用sender参数,而不是在操作方法中使用属性(即使您有一个属性)。

相关内容

  • 没有找到相关文章

最新更新