【问题标题】:deselecting other buttons on click of any one uibutton-iphone单击任何一个 uibutton-iphone 时取消选择其他按钮
【发布时间】:2011-07-22 10:41:47
【问题描述】:

如何在单击一个按钮时取消选择另外两个按钮。我可以通过单击它们来更改按钮的图像。我从 IB 创建了三个按钮。它们的 ibaction 如下:

- (IBAction)todaybuttonClicked:(id)sender
{
    todayButton.tag=0;

    NSLog(@"hi todaybuttonClicked");
    if ([sender isSelected]) {
        [todayButton setBackgroundImage:[UIImage imageNamed:@"normal.png"] forState:UIControlStateNormal];

        [sender setSelected:NO];
    }
    else{
        [sender setBackgroundImage:[UIImage imageNamed:@"selected.png"] forState:UIControlStateNormal];
        [sender setSelected:YES];
    }  
        [self todayOffersSegmentSelected];

}

- (IBAction)tomorrowbuttonClicked:(id)sender
{
    tomorrowButton.tag=1;

    NSLog(@"hi tomorrowbuttonClicked");

    if ([sender isSelected]) {

        [tomorrowButton setBackgroundImage:[UIImage imageNamed:@"normal.png"] forState:UIControlStateNormal];

        [sender setSelected:NO];
    }
    else{
        [sender setBackgroundImage:[UIImage imageNamed:@"selected.png"] forState:UIControlStateSelected];
        [sender setSelected:YES];

    }
    [self tomorrowOffersSegmentSelected];
}

- (IBAction)restoftheweekbuttonClicked:(id)sender
{
    restoftheweekButton.tag=2;

    NSLog(@"hi restoftheweekbuttonClicked");

    if ([sender isSelected])
    {
        [restoftheweekButton setBackgroundImage:[UIImage imageNamed:@"normal.png"] forState:UIControlStateNormal];

        [sender setSelected:NO];

    }

    else{

        [sender setBackgroundImage:[UIImage imageNamed:@"selected.png"] forState:UIControlStateSelected];

        [sender setSelected:YES];

    }
    [self restOfWeekOffersSegmentSelected];

}

有什么建议吗?? 谢谢

【问题讨论】:

    标签: iphone


    【解决方案1】:

    在您的 viewDidLoad 中,您可以使用按钮初始化 _days 数组:

    _daysArray =[[[NSArray alloc]initWithObjects:self.sunday,self.monday,self.tuesday,self.wednesday,self.thursday,self.friday,self.saturday nil]retain];
    

    如果您使用 IB 创建按钮,只需将它们全部指向您班级中的同一个 IBAction:

    -(IBAction)changeSelectedDay:(id)sender
    {
        for (UIButton *button in _buttonsArray) {
            [button setSelected:([button isEqual:sender])?YES:NO];
        }
    }
    

    恕我直言,这种方法更干净。

    【讨论】:

      【解决方案2】:

      当按下今天按钮时,您可以通过以下方式取消选择其他两个按钮:

      -(IBAction)todaybuttonClicked:(id)sender
      {
      
          [tomorrowButton setSelected: NO];
          [restoftheweekButton setSelected: NO];
      
      
          //... do rest of stuff
      }
      

      选择另一个按钮时使用相同的模式。

      【讨论】:

        【解决方案3】:

        您可以使用IBOutletCollection。它适用于类似的要求。我将尝试粘贴一篇详细解释的博文。

        一些相关的 SO 帖子是: Practical efficient usage of IBOutletColletion

        【讨论】:

          猜你喜欢
          • 2015-02-27
          • 2021-09-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-04-05
          • 2021-12-04
          相关资源
          最近更新 更多