UISegmentedControl不起作用

时间:2011-10-04 10:39:20

标签: ios iphone objective-c uisegmentedcontrol

您好我试图使用分段控件在三个地图视图之间交换,但它不起作用。

我的IBAction方法如下。

- (IBAction)segmentSwitch:(id)sender {

    NSLog(@"inside segmented switch");
    NSLog(@"selected segment %@",selectedSegment);
    if (selectedSegment == 0) {
        mapView.mapType = MKMapTypeStandard; 

    }
    else{
        mapView.mapType = MKMapTypeHybrid; 

    }
}

我已将UISegementedControl声明为插座并将其连接到xib视图。我还将此方法与内部/外部的触摸/触摸相关联。它仍然不会打印上面给出的NSLog命令。这意味着根本没有访问此方法?

3 个答案:

答案 0 :(得分:4)

如何在IB中为处理两个以上段的人设置UISegmentedControl的快速摘要:

    @interface中的
  1. IBOutlet UISegmentedControl *segmentControl;(或将其设置为@property)
  2. 在@end 之前的.h中的
  3. - (IBAction)segmentedControlIndexChanged:(id)sender;
  4. 拖动"分段控制"进入视角和改变"风格"到平原,边界或酒吧
  5. 增加#of"段落"
  6. 选择"细分"并编辑"标题"确保"启用"已检查
  7. 将您的segmentedControl连接到文件所有者
  8. 连接您的segmentedControlIndexChanged:操作并选择" Value Changed" NOT"触摸内部" !!
  9. 添加一些代码,如果你说4段,可能是一个switch语句:
  10.   

    -(IBAction)segmentedControlIndexChanged:(id)sender {
    
    NSLog(@"segmentedControlIndexChanged");
    
    switch (segmentControl.selectedSegmentIndex)
    {
        case 0:
        {
            NSLog(@"dateSegmentActive");
            dateSegmentActive = YES;
            noteSegmentActive = NO;
            typeSegmentActive = NO;
            userIDSegmentActive = NO;
            [yourTable reloadData];
        }
            break;
        case 1:
        {
            NSLog(@"noteSegmentActive");
            dateSegmentActive = NO;
            noteSegmentActive = YES;
            typeSegmentActive = NO;
            userIDSegmentActive = NO;
            [yourTable reloadData];
        }
            break;
        case 2:
        {
            NSLog(@"typeSegmentActive");
            dateSegmentActive = NO;
            noteSegmentActive = NO;
            typeSegmentActive = YES;
            userIDSegmentActive = NO;
            [yourTable reloadData];
        }
            break;
        case 3:
        {
            NSLog(@"userIDSegmentActive");
            dateSegmentActive = NO;
            noteSegmentActive = NO;
            typeSegmentActive = NO;
            userIDSegmentActive = YES;
            [yourTable reloadData];
        }
            break;
    
        default:
            break;
    }
    }
    

    在最近的iOS版本中,您需要针对每种情况的大括号:否则您将收到错误。这也显示了一些bool标记以跟踪哪个段处于活动状态,可能是您的willDisplayCell方法。

答案 1 :(得分:1)

您应该使用ValueChanged操作来检测段的切换。

selectedSegmentUISegmentedControl吗?

然后你的代码应该是:

- (IBAction) segmentSwitch:(id)sender {
    if (self.selectedSegment.selectedSegmentIndex == 0) {
        mapView.mapType = MKMapTypeStandard; 
    } else{
        mapView.mapType = MKMapTypeHybrid; 
    }
}

答案 2 :(得分:1)

希望您选择了正确的方法ValueChanged,并且您已正确连接方法的出口。

您现在唯一需要做的就是用代码替换代码。

- (IBAction)segmentSwitch:(UISegmentedControl *)sender 
{
    NSLog(@"inside segmented switch");
    NSLog(@"selected segment %d",sender.selectedSegmentIndex);
    if (sender.selectedSegmentIndex == 0) 
    {
        mapView.mapType = MKMapTypeStandard; 

    }
    else
    {
        mapView.mapType = MKMapTypeHybrid; 
    }
}

尝试用您的代码替换此代码。

希望这会对你有所帮助。