【问题标题】:UISegmentControl doesn't refresh UILabel connected to UIPickerViewUISegmentControl 不刷新连接到 UIPickerView 的 UILabel
【发布时间】:2013-06-20 21:07:09
【问题描述】:

我是 Xcode 的大初学者,在构建我的应用程序时遇到了问题。我的应用由 UILabel、UIPickerView 和 UISegmentControl 组成。每次用户更改 UIPickerView 中的选定行时,我希望我的应用程序在 UILabel 中显示不同的值。起初我只有一组值要显示在 UILabel 中,但最终添加了第二组。我添加了 UISegmentControl 以便用户能够在这两组之间切换。这是我的“if 语句”的示例

- (void)pickerView: (UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {

if (row == 0 && segmentController.selectedSegmentIndex == 0) {


    pickLabel.text=@"100 PPM";
}

else if (row == 0 && segmentController.selectedSegmentIndex == 1) {


    pickLabel.text=@"110 PPM";
}

else if (row == 1 && segmentController.selectedSegmentIndex == 0) {


    pickLabel.text=@"95 PPM";
}

else if (row == 1 && segmentController.selectedSegmentIndex == 1) {


    pickLabel.text=@"105 PPM";
}

问题是,UILabel 中的值仅在 UIPickerView 中的选定行发生更改时发生更改,而不是在段控件更改时更改。例如,当我更改段控制索引时,UILabel 不会更改,直到我切换到 UIPicker 中的不同行。我想做一个 IBAction,当段控制索引改变时强制 UILabel 改变。比我将我的 IBAction 连接到 UISegmentControl 与“值更改”。 我需要一些代码来放入 IBAction。请帮忙!

【问题讨论】:

    标签: ios uilabel uipickerview uisegmentedcontrol uipicker


    【解决方案1】:
    - (void)pickerView: (UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    

    当您单独更改选择器值时执行。更改段时,您必须调用一个方法并在此方法中执行相同操作

    试试这个

    声明

    NSInteger selectedRowInpicker;
    

    并使用

    -(IBAction)valueChanged
    {
        if (selectedRowInpicker == 0 && segmentController.selectedSegmentIndex == 0) {
    
    
            pickLabel.text=@"100 PPM";
        }
    
        else if (selectedRowInpicker == 0 && segmentController.selectedSegmentIndex == 1) {
    
    
            pickLabel.text=@"110 PPM";
        }
    
        else if (selectedRowInpicker == 1 && segmentController.selectedSegmentIndex == 0) {
    
    
            pickLabel.text=@"95 PPM";
        }
    
        else if (selectedRowInpicker == 1 && segmentController.selectedSegmentIndex == 1) {
    
    
            pickLabel.text=@"105 PPM";
        }
    }
    
    
    - (void)pickerView: (UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
    {
        selectedRowInpicker =row;
        [self valueChanged];
    }
    

    将 valueChanged 连接到细分操作“value changed”

    【讨论】:

    • 注意 viewDidLoad 或 viewWillAppear 方法中的初始条件
    • 谢谢。这对我有用......应用程序确实运行并且一切正常,但我遇到了语义问题。 “从'NSInteger'(又名'int')分配给'NSInteger *'(又名'int *')的不兼容整数到指针转换;使用&获取地址”我在每个“selectedRowInpicker = row;”处收到此通知并且“行”以黄色突出显示。
    • NSInteger 不需要 * ,更新答案,试试用NSInteger selectedRowInpicker;
    【解决方案2】:

    您也应该为 UISegmentedControl 注册一个事件。

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

    现在创建一个类似的方法:

    -(void) valueChanged:(UISegmetedControl *)control
    {
        [self modifyLabel];
    }
    
    - (void)pickerView: (UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
    {
        [self modifyLabel];
    }
    
    -(void) modifyLabel
    {
    //Based on picker and segmented controller, update the label
    }   
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多