代码之家  ›  专栏  ›  技术社区  ›  Souljacker

在uibutton中实现切换功能

  •  1
  • Souljacker  · 技术社区  · 15 年前

    我想知道如何将切换功能添加到 UIButton ,类似于用户点击一个未选中的按钮,该按钮变为选中状态,并保持选中状态,直到用户再次点击该按钮,使其像以前一样未选中。

    我想做一个 IBAction 哪个选项将其从未选定更改为选定,我如何才能这样做?

    以下是我的尝试:

    -(IBAction)toggle {
    
        //Toggle on implementation.
    
            button.selected = YES;
            button.highlighted = NO;
            button.enabled = YES;
    
        //Toggle off implementation.
    
        if (button.highlighted == YES) {
    
            button.selected = NO;
            button.highlighted = YES;
            button.enabled = NO;
        }
    }
    

    问题…

    -(IBAction)toggleFav {
    
        if (favButton == nil) {
    
            UIImage *unselectedImage = [UIImage imageNamed:@"favUntapped.png"];
            UIImage *selectedImage = [UIImage imageNamed:@"favTapped.png"];
            [favButton setImage:unselectedImage forState:UIControlStateNormal];
            [favButton setImage:selectedImage forState:UIControlStateSelected];
            [favButton setFrame:CGRectMake(0, 0, 40, 40)];
        }       
    
        if([favButton isSelected]){
    
            //Add to menu.
            [favButton setSelected:NO];
        } else {
    
            //Remove from menu.
    
            [favButton setSelected:YES];
        }
    }
    
    4 回复  |  直到 15 年前
        1
  •  11
  •   vikingosegundo    15 年前
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
        static NSString *CellIdentifier = @"Cell";
    
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
            UIImage *unselectedImage = [UIImage imageNamed:@"unselected.png"];
            UIImage *selectedImage = [UIImage imageNamed:@"selected.png"];
            UIButton *b = [UIButton buttonWithType:UIButtonTypeCustom];
            [b setBackgroundImage:unselectedImage forState:UIControlStateNormal];
            [b setBackgroundImage:selectedImage forState:UIControlStateSelected];
            [b addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
            [b setFrame:CGRectMake(0, 0, 40, 40)];
            [cell.contentView addSubview:b];
        }       
        return cell;
    }
    
    -(void) buttonPressed:(UIButton *)sender
    {
        if([sender isSelected]){
            //...
            [sender setSelected:NO];
        } else {
            //...    
            [sender setSelected:YES];
        }
    
    }
    

    编辑
    你的 toggleFav 代码没有多大意义。
    if (favButton == nil) { 检查,如果 favButton 存在。但是如果你把它和ib连接起来,它就应该一直在那里。如果不是,按钮怎么能调用这个方法?这样做:

    -(void)viewDidLoad
    {
        //....
        UIImage *unselectedImage = [UIImage imageNamed:@"favUntapped.png"];
        UIImage *selectedImage = [UIImage imageNamed:@"favTapped.png"];
        [favButton setImage:unselectedImage forState:UIControlStateNormal];
        [favButton setImage:selectedImage forState:UIControlStateSelected];
        [favButton setFrame:CGRectMake(0, 0, 40, 40)];
        //....
    }
    
    
    -(IBAction)toggleFav:(UIButton *)sender {
        if([sender isSelected]){
            //...
            [sender setSelected:NO];
        } else {
            //...    
            [sender setSelected:YES];
        }
    }
    

    编辑
    Here 您将发现一个带有detailview的示例项目,其中包含一个具有两个状态的按钮。
    音符: 我正在保存在nsuserdefaults中选择的按钮的信息。你不应该那样做。相反,您需要将其保存在模型中。但是由于我没有关于你的模型的信息,我只是在使用nsuserdefaults。

        2
  •  2
  •   Rogers    14 年前
    -(void)hitButton:(UIButton*)button
    {
        buttonOnFlag = !buttonOnFlag;
        if( buttonFlag )
            [self performSelector:@selector(setHighlight:) withObject:button afterDelay:0];
    }
    
    - (void)setHighlight:(UIButton*)button 
    {
        button.highlighted = true;
    }
    
        3
  •  0
  •   KingofBliss    15 年前

    使用button.highlighted属性

        4
  •  0
  •   halfer Jatin Pandey    7 年前

    您应该这样编码:

    -(IBAction)toggle:(id)sender {
    
        //Toggle on implementation.
       if (sender.highlighted == NO)
         {
            sender.selected = YES;
            sender.highlighted = NO;
            sender.enabled = YES;
         }
    
        //Toggle off implementation.
    
       else{
    
            sender.selected = NO;
            sender.highlighted = YES;
            sender.enabled = NO;
        }
    }