Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带单选iOS的UITableVIew_Ios_Objective C_Uitableview - Fatal编程技术网

带单选iOS的UITableVIew

带单选iOS的UITableVIew,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我对iOS开发完全是新手,我的公司要求我跳进另一位业余爱好者编写的代码中去修复它。这个应用程序的主视图只是一个表视图,我们希望用户能够从表中选择一个单元格,这将突出显示它,并在页面上设置一些其他按钮来对该特定单元格执行操作 只要我知道选择了哪个单元格,页面上的其他按钮就可以正常工作,所以我不太担心。但另一个人编写的每次选择一个单元格的代码非常糟糕,我试图用它来替换的代码更好,但仍然有很多错误 我的代码是这样写的,有点像是从我不完全理解的旧东西中采用的。问题在于,当在一行中单击单元格两次或更改视图

我对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;
}
关于最后一段代码,我只需要知道self.currentCategory和taskCategories等变量的来源。到目前为止,我正在使用的代码中似乎没有任何类似的变量,因此我想知道我必须指向或创建什么


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

UITableView是一个巨大的控件,可以通过多种方式实现。根据您的描述,我认为您将其用于静态分组单元格,以便组成表单,对吗

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


如果使用的是情节提要和模板单元格,则可以设置单元格上的“选择”属性,以在选定时更改颜色。然后可以删除更改单元格背景的逻辑。我认为这可能是一个很好的起点……

您可以右键单击变量并选择“跳转到定义”,它将显示其声明的位置

至于代码的其余部分,其他答案所说的是正确的


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

你的问题之一是

200/255是0


使用200/255.0f来补充Justin的答案,这里有一些链接。iOS学徒包是一个很好的jumpstart材料,它指导您创建多个应用程序,精确定位iOS的基础知识,如表视图。我强烈推荐!

本系列视频还对表格视图进行了精彩的介绍,只需不到一个小时,就可以展示使用UITableViews的大图,这是免费的:

不幸的是,苹果没有提供完整的代码,所以我找不到任何定义。。。我同意我需要退后一步进行阅读,我希望很快会这样做,但我的公司确实在努力推出此更新,因为它已经好几个月没有被触及了。您询问了self.currentCategory和taskCategories的来源。您可以使用跳转到定义来查找它们,但它们应该位于.h或.m文件中,具体取决于开发人员如何设置它们。正如我所说,Apple不提供.h文件,甚至不提供此类的标题和属性。我提供了找到代码的链接。如果你能为我找到它,我将非常感激。我看到我的困惑,这只是一个代码片段。他们使用这个变量来保存他们的类别。这里显示了一种处理存储所选项目的方法。他们会在他们的.h文件中为这个实现定义这个变量。我可以让它变成灰色,所以我认为我的代码正在处理这些计算。但无论如何,我还是会改变的,谢谢。说实话,我不知道使用的是什么样的电池。你能帮我理解苹果的代码到底是怎么回事吗?看起来catIndex与所选索引进行了比较,如果相同,则在取消选择后返回,但我不知道taskCategories真正应该表示什么,因为这是所有可用的代码。然后,如果选中未选中的单元格,则会添加复选标记。否则将删除复选标记。我想我不理解在本例中被选中的单元格和有复选标记的单元格之间的区别。因为如果单击最后一个选定的单元格,则会取消选中该单元格并结束该方法。但是代码继续说,如果选中了旧单元格,复选标记将被删除。选中的单元格将用一些自定义颜色高亮显示。默认情况下,如果未处于编辑模式,则只能选择一个单元格。复选标记是显示在单元格右侧的附件视图。他们可能是他们 r勾选一个小勾号或披露或详细信息指示箭头。辅助视图可以在任意数量的单元格中设置,并且是辅助视觉信息。在Apple示例中,我认为他们可能使用此资源为选定的单元格添加复选标记,因此单元格要么高亮显示,要么选中。
    - (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;
    }
}