我是iPhone应用程序开发的新手。在我的应用程序中,我正在使用tableview。在tableview中,我使用了两个uibutton,一个为白色,另一个为灰色,如果我单击灰色按钮,则应更改为白色,另一个按钮应同时更改为灰色。

这是我的代码:

       -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    ExampleCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    cell=nil;
    if(cell == nil)
     {
         cell = [[ExampleCell alloc] initWithStyle:UITableViewCellStyleDefault
                                   reuseIdentifier:CellIdentifier];
     }

    if(indexPath.row == 0)
    {
        postbtn = [UIButton buttonWithType:UIButtonTypeCustom];
        [postbtn setFrame:CGRectMake(0, 205, 160, 34)];
        [postbtn setBackgroundColor:[UIColor whiteColor]];
        [postbtn setTitle:[NSString stringWithFormat:@"%@ POST",[AppDelegate.profileDic objectForKey:@"posts"]] forState:UIControlStateNormal];
        [postbtn.titleLabel setFont:[UIFont fontWithName:@"Verdana-Bold" size:10]];
        [postbtn setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];
        [postbtn setTag:1001];
        [postbtn addTarget:self action:@selector(reloadAction:) forControlEvents:UIControlEventTouchUpInside];
        [cell addSubview:postbtn];

        likebtn = [UIButton buttonWithType:UIButtonTypeCustom];
        [likebtn setFrame:CGRectMake(160, 205, 160, 34)];
        [likebtn setBackgroundColor:[UIColor lightGrayColor]];
        [likebtn setTitle:[NSString stringWithFormat:@"%@ LIKE",[AppDelegate.profileDic objectForKey:@"likes"]] forState:UIControlStateNormal];
        [likebtn.titleLabel setFont:[UIFont fontWithName:@"Verdana-Bold" size:10]];
        [likebtn setTitleColor:[UIColor grayColor] forState:UIControlStateNormal];
        [likebtn setTag:1002];
        [likebtn addTarget:self action:@selector(reloadAction:) forControlEvents:UIControlEventTouchUpInside];
        [cell addSubview:likebtn];
        }
)};

    -(void)reloadAction:(id)sender
    {


        if ([sender tag] == 1001)
        {
           [postbtn setBackgroundColor:[UIColor whiteColor]];
           [likebtn setBackgroundColor:[UIColor lightGrayColor]];
            AppDelegate.selectedTab=1;
            [profiletableview reloadData];

        }
        if ([sender tag] == 1002)
        {
            [postbtn setBackgroundColor:[UIColor lightGrayColor]];
            [likebtn setBackgroundColor:[UIColor whiteColor]];
            AppDelegate.selectedTab=2;
            [self likewebservice];
            [profiletableview reloadData];
        }
    }


有什么办法可以改变uibutton的背景颜色。

最佳答案

问题在于,按下按钮后,您将立即通过以下方式重新加载表:

[profiletableview reloadData];


在您的reloadAction:方法中。这样,您只是将颜色重置为最初在tableView:cellForRowAtIndexPath:中定义的颜色。取出那条线,它应该可以工作。



编辑:

并且,如果您需要能够重新加载表中的数据,则可能不应该在tableView:cellForRowAtIndexPath:方法中初始化UIButton(或者,至少在第一次加载之后,您不应重复初始化UIButton)。您最好在viewDidLoad方法中初始化UIButton,以便在加载表之前对其进行初始化,然后(如已完成)在tableView:cellForRowAtIndexPath:期间将UIButtons添加到单元格,并在<。我可能是错的,但在这种情况下,您可能仍然绝对不需要在reloadAction:期间重新加载表,因为您可以直接更改按钮,也可以使用相同的方法直接更改按钮标题。但是,通常可以选择重新加载表格而不弄乱按钮,这是很好的选择。

编辑#2:

另外,如果该行保持静态,则可以使用reloadRowsAtIndexPaths:withRowAnimation仅重新加载必要的行,或者,如KIDdAe所述,进行全表重新加载,但仅在cell == nil时才将按钮添加到该单元格。

关于ios - 如何在iPhone的单击操作中更改两个uibutton的背景颜色?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20638512/

10-16 19:37