0

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

        }


    }
4

1 回答 1

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 参数而不是属性(即使你有一个属性)。

于 2014-06-27T00:38:57.910 回答