UISegmentedControl为每个单元格执行相同的操作

时间:2014-06-27 00:26:29

标签: ios objective-c uisegmentedcontrol segmentedcontrol

我有一个分段控件,其中两个单元以编程方式定义。当我进入我的应用程序时,两个单元格执行相同的操作。第一个应该在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;

        }


    }

1 个答案:

答案 0 :(得分:2)

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

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) {

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