具有单选iOS的UITableVIew

时间:2014-08-22 16:36:04

标签: ios objective-c uitableview

我对iOS开发完全不熟悉,并且已经被我的公司要求跳转到另一个业余爱好者写的代码,这些代码留给我们并修复它。这个应用程序的主要视图只是一个表视图,我们希望用户能够从表中选择一个单元格,这将突出显示它并在页面上设置一些其他按钮以对该特定单元格执行某些操作。

使页面上的其他按钮工作正常,只要我知道选择了哪个单元格,所以我并不太担心。但是其他人一次选择一个单元格所写的代码是残暴的,而我试图用它代替的代码更好,但仍然非常错误。

我的代码是下面写的(从我不完全理解的旧东西中采用的)。它的问题是,当单元格连续两次单击或者更改视图并返回到此表视图时,背景变为黑色。

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
    for (int i = 0; i < [tableView numberOfRowsInSection:0]; i++) {
        [tableView deselectRowAtIndexPath:currentSelection animated:true];
    }

    if(currentSelection.item == indexPath.item){
        [tableView deselectRowAtIndexPath:currentSelection animated:true];

    }

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    //highlight bg to light grey
    cell.backgroundColor =[UIColor colorWithRed:200/255 green:200/255 blue:200/255 alpha:1.0f];
    currentSelection = indexPath;

    //code for other button functions
}



- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    //set bg back to white
    cell.backgroundColor =[UIColor colorWithRed:255/255 green:255/255 blue:255/255 alpha:1.0f];
    noSelectedRows = true;
}

如果这太糟糕了,那就看看并尝试修复,我正在查看Apple提供的一个教程,无论如何我想要了解一点。在此处找到以下代码:https://developer.apple.com/library/ios/documentation/userexperience/conceptual/tableview_iphone/ManageSelections/ManageSelections.html

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{

    [tableView deselectRowAtIndexPath:indexPath animated:NO];
    NSInteger catIndex = [taskCategories indexOfObject:self.currentCategory];
    if (catIndex == indexPath.row) {
        return;
    }
    NSIndexPath *oldIndexPath = [NSIndexPath indexPathForRow:catIndex inSection:0];

    UITableViewCell *newCell = [tableView cellForRowAtIndexPath:indexPath];
    if (newCell.accessoryType == UITableViewCellAccessoryNone) {
        newCell.accessoryType = UITableViewCellAccessoryCheckmark;
        self.currentCategory = [taskCategories objectAtIndex:indexPath.row];
    }

    UITableViewCell *oldCell = [tableView cellForRowAtIndexPath:oldIndexPath];
    if (oldCell.accessoryType == UITableViewCellAccessoryCheckmark) {
        oldCell.accessoryType = UITableViewCellAccessoryNone;
    }
}

我需要知道的关于最后一个代码的唯一事情是self.currentCategory和taskCategories等变量来自哪里。截至目前,我正在使用的代码中似乎没有任何类似的变量,因此我想知道我必须指向或创建的内容。

这也是我在StackOverflow上的第一篇文章,所以如果我遗漏了一些重要内容,请告诉我。

4 个答案:

答案 0 :(得分:0)

UITableView是一个巨大的控件,它可以通过多种方式实现。根据你的描述,我认为你将它与Static Grouped单元格一起使用,以构成一个表格,对吗?

实际上,选择显示由UITableView自动处理,因此如果有错误的行为,手动更改单元格背景的didDeselecteRowAtIndex路径的代码可能是一个来源。请注意,在Apple样本中,他们使用类似的逻辑来在点击单元格时更改附件视图,这需要手动设置。

如果您正在使用Storyboard和Template单​​元格,则可以在单元格上设置“Selection”属性以在选择时更改颜色。然后,您可以删除更改单元格背景的逻辑。我认为这可能是一个很好的起点......

答案 1 :(得分:0)

您可以右键单击该变量并选择Jump To Definition,它将显示其声明的位置。

就其他代码而言,其他答案所说的是正确的。

我建议你买一本关于iOS开发的书。 Big Nerd Ranch的书是一个很好的开始。

答案 2 :(得分:0)

你的一个问题是,

200/2550

使用200/255.0f代替

答案 3 :(得分:0)

补充贾斯汀的答案,这里有一些链接。 iOS Apprentice Bundle是一个很棒的快速入门材料,可以指导您创建多个应用程序,精确定位iOS的基础知识,例如表格视图。我强烈推荐! http://www.raywenderlich.com/store/ios-apprentice

这一系列视频也对表格视图进行了很好的介绍,它将花费不到一个小时的时间,并将展示使用UITableViews的全局,这个是免费的: https://www.youtube.com/watch?v=Rh-vfLXsTac