【问题标题】:Detect Selected State of UIButton iOS检测 UIButton iOS 的选定状态
【发布时间】:2014-08-21 09:45:47
【问题描述】:

如何检测 uibutton 的选中状态?

我有 7 个按钮,我让它们能够一次切换或选择多个按钮。

当我按下完成按钮时,我希望能够知道哪些按钮处于选中状态。

因此,如果选择了 M、T 和 W,那么我希望能够在推送完成时检测到这一点。

我目前在按钮上放了一个标签,然后调用一个方法来取消选择或选择多个按钮。

self.repeatOccurrenceFrequencyWeeklyTF = [[UITextField alloc]init];
self.repeatOccurrenceFrequencyWeeklyTF.frame = CGRectMake(80, 80, 32, 32);
self.repeatOccurrenceFrequencyWeeklyTF.delegate = self;
self.repeatOccurrenceFrequencyWeeklyTF.background = [UIImage imageNamed:@"repeatWeekly"];
self.repeatOccurrenceFrequencyWeeklyTF.font = [UIFont fontWithName:@"SegoeWP" size:15];
self.repeatOccurrenceFrequencyWeeklyTF.textColor = [UIColor appGreyText];
[self.repeatOccurrenceFrequencyWeeklyTF setValue:[UIColor colorWithRed:153/255.0 green:153/255.0 blue:153/255.0 alpha:1.0] forKeyPath:@"_placeholderLabel.textColor"];
self.repeatOccurrenceFrequencyWeeklyTF.placeholder = @"1";
UIView *leftView1 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 12, self.repeatOccurrenceFrequencyWeeklyTF.frame.size.height)];
self.repeatOccurrenceFrequencyWeeklyTF.leftView = leftView1;
self.repeatOccurrenceFrequencyWeeklyTF.leftViewMode = UITextFieldViewModeAlways;
self.repeatOccurrenceFrequencyWeeklyTF.rightViewMode = UITextFieldViewModeAlways;
self.keyboardToolbar = [self createInputToolbar];
self.repeatOccurrenceFrequencyWeeklyTF.inputAccessoryView = self.keyboardToolbar;
self.repeatOccurrenceFrequencyWeeklyTF.delegate = self;
self.repeatOccurrenceFrequencyWeeklyTF.keyboardType = UIKeyboardTypeNumberPad;
self.repeatOccurrenceFrequencyWeeklyTF.enabled = NO;
[self.view addSubview:self.repeatOccurrenceFrequencyWeeklyTF];

// Now, in your button action handler, you can do something like this:
- (void)mondayButtonTouch:(UIButton *)aButton withEvent:(UIEvent *)event
{
aButton.selected = !aButton.selected;

if(aButton.tag == 111) {

}

if(aButton.tag == 222) {

}

if(aButton.tag == 333) {

}

if(aButton.tag == 444) {

}

if(aButton.tag == 555) {

}

if(aButton.tag == 666) {

}

NSLog(@"dsfdfdfsdfs %ld", (long)aButton.tag);
[aButton setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected];

}

【问题讨论】:

  • 使用NSMutableArray 存储uibutton 标签并使用这个数组来满足你的需要
  • 您也可以使用 IBOutletCollection,当按下完成按钮时,您可以遍历数组并检查选择了哪个按钮。

标签: ios objective-c iphone uibutton


【解决方案1】:

我会使用NS_ENUM(这有助于保持代码美观且易读)和NSMutableArray 来跟踪您选择的按钮。 声明一个如下所示的枚举:

typedef NS_ENUM(NSInteger, Weekday) {
WeekdayMonday,
WeekdayTuesday,
WeekdayWednesday,
WeekdayThursday,
WeekdayFriday,
WeekdaySaturday,
WeekdaySunday
};

然后用正确的枚举标记你的按钮:

tuesdayButton.tag = WeekdayTuesday;

当你点击按钮时检查你的枚举是否存在于你的数组中:

- (void)buttonTouch:(UIButton *)aButton withEvent:(UIEvent *)event
{
if ([array containsObject:@(aButton.tag)]){ //exists, remove it from array
    [array removeObjectIdenticalTo:@(aButton.tag)];
    }
}else{
    [array addObject:@(aButton.tag)];
}

}

【讨论】:

    【解决方案2】:

    一种可能性是创建一个名为selectedButtonNSMutableArray。这样做:

    - (void)mondayButtonTouch:(UIButton *)aButton withEvent:(UIEvent *)event
    {
        aButton.selected = !aButton.selected;
    
        if(!aButton.selected && selectedButton.containsObject(aButton.Tag)) {
            [selectedButton removeObject:aButton.tag];
        }
        else if(aButton.selected && !selectedButton.containsObject(aButton.Tag)) {
            [selectedButton addObject:aButton.tag];          
        }
    
    
        // do your stuff here
    }
    

    现在在done 按钮上单击,所有被选中标签的按钮都可以使用selectedButton 数组进行跟踪。

    你可以使用:

    [self.view viewWithTag:yourTagHere]
    

    【讨论】:

      【解决方案3】:

      你可以用这个:

      for (UIButton *btn in [self.view subviews]) { // self.view (change it with your button superview)
          if ([btn isKindOfClass:[UIButton class]] && [btn isSelected] == YES) {
              // here you found the button which is selected
          }
      }
      

      【讨论】:

        【解决方案4】:

        [self.view viewWithTag:yourTagHere] 替换

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-02-24
          • 2021-03-24
          • 2014-01-03
          • 1970-01-01
          相关资源
          最近更新 更多