我有一个分段控件,其中两个单元以编程方式定义。当我进入我的应用程序时,两个单元格执行相同的操作。第一个应该在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;
}
}
答案 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参数而不是属性(即使你有一个属性)都会更好。