如何在单个视图中处理多个分段控件的事件

Posted

技术标签:

【中文标题】如何在单个视图中处理多个分段控件的事件【英文标题】:How to handle events of multiple segmented control in a single view 【发布时间】:2011-11-25 05:20:48 【问题描述】:

我的视图控制器视图中有 2 个分段控件。如何处理两个分段控制器的点击事件?

【问题讨论】:

【参考方案1】:

有两种方法可以做到这一点。

    为每个段控件添加不同的操作

    为每个段控件添加相同的操作并使用其标签检查哪个控件被点击。

    [yourSegmentedControl addTarget:self action:@selector(segmentSwitch:) forControlEvents:UIControlEventValueChanged];
    

    - (IBAction)segmentSwitch:(id)sender 
    
        UISegmentedControl *segmentedControl = (UISegmentedControl *) sender;
    
        if(segmentedControl.tag == someTag)
        
            if(segmentedControl.selectedSegmentIndex == 1)
            
                // your code
            
            else if(segmentedControl.selectedSegmentIndex == 2)
            
                // your code
            
        
        else if(segmentedControl.tag == someTag)
        
            if(segmentedControl.selectedSegmentIndex == 1)
            
                // your code
            
            else if(segmentedControl.selectedSegmentIndex == 2)
            
                // your code
            
        
    
    

【讨论】:

【参考方案2】:

Apple 文档说:

http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UISegmentedControl_Class/Reference/UISegmentedControl.html

您使用 UIControlEventValueChanged 常量为分段控件注册目标操作方法,如下所示。

[segmentedControl addTarget:self
                 action:@selector(action:)
       forControlEvents:UIControlEventValueChanged];

因此,您只需为每个分段控件注册操作即可。

【讨论】:

【参考方案3】:

将每个分段控件的tag 属性设置为不同的整数。然后在您设置为值更改时的操作的方法中,使用[sender tag] 检查tag 属性设置为哪个整数。

【讨论】:

【参考方案4】:

您可以使用分段的选定模式:

UISegmentedControl *tempSegment = sender;
if ([tempSegment selectedSegmentIndex] == 0)
    //first Action

else if ([tempSegment selectedSegmentIndex] == 1)
    //second Action


【讨论】:

【参考方案5】:

为这些分段控件分配两个不同的操作:

[segmentedControl addTarget:self
                 action:@selector(action:)
       forControlEvents:UIControlEventValueChanged];

【讨论】:

【参考方案6】:

Swift 版本:

 @IBAction func yourFunctionName(sender: UISegmentedControl) 

        if (sender.selectedSegmentIndex == 0)//choice 1

        else//choice 2

    

【讨论】:

以上是关于如何在单个视图中处理多个分段控件的事件的主要内容,如果未能解决你的问题,请参考以下文章

表格视图顶部的分段控件,但不在标题视图中

如何在 Swift 的分段控件中调整 textLabel 的大小?

iPhone sdk如何使用分段控件显示的两个不同视图设置视图方向

为啥我的分段控件没有显示在我的视图中?

iOS_book 02 - 基本交互(约束视图控制器基本控件:按钮文本框分段控件开关标签图像控件)

如何在 Swift 的工具栏顶部居中分段控件?