Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.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
Iphone 从UINavigationController子屏幕返回时,如何维护UITableView所选行?_Iphone_Objective C_Cocoa Touch_Uitableview - Fatal编程技术网

Iphone 从UINavigationController子屏幕返回时,如何维护UITableView所选行?

Iphone 从UINavigationController子屏幕返回时,如何维护UITableView所选行?,iphone,objective-c,cocoa-touch,uitableview,Iphone,Objective C,Cocoa Touch,Uitableview,我有一个客户的UITable视图,其中选择了行/客户。然后,用户可以在UINavigationController堆栈上推送另一个视图以添加新客户。当我弹出子屏幕并返回UITableView时,以前选择的行将不再被选中 我可以在ViewDidDisplay()中重新选择行,但它看起来很糟糕,因为您可以看到取消选择和选择。从子屏幕返回时,是否有办法保持选中的行?默认情况下,当您返回到该VC时,选中的行将被取消选中(带有动画)。 因此,如果推送DetailViewController,单元格将保持选

我有一个客户的UITable视图,其中选择了行/客户。然后,用户可以在UINavigationController堆栈上推送另一个视图以添加新客户。当我弹出子屏幕并返回UITableView时,以前选择的行将不再被选中


我可以在ViewDidDisplay()中重新选择行,但它看起来很糟糕,因为您可以看到取消选择和选择。从子屏幕返回时,是否有办法保持选中的行?

默认情况下,当您返回到该VC时,选中的行将被取消选中(带有动画)。
因此,如果推送DetailViewController,单元格将保持选中状态,直到返回到RootViewController,然后自动取消选中

我以前也有这样的问题。确保始终调用超类的方法实现,如ViewWillDisplay、ViewWillEnglishe等。

另外,不要手动调用取消选择行索引路径。

您不能一直选择tableViewCell。一旦达到目的,它就会恢复正常。我想你的意思是突出显示或显示为被选中,我是根据这个回答这个问题的

获取在
cellForRowatineXpath
中选择的行。当您弹出导航控制器并返回到tableView时,转到
单元格for Rowatindexpath
并高亮显示该单元格(您可以根据需要使用任何UIColor)-没有特定的方式高亮显示内容-使用您的想象-默认高亮显示样式为蓝色,而文本为白色

这是怎么做到的

  • cellforrowatinexpath
  • 存储在外部变量中/或
    NSUserDefaults
    中,您还可以使用
    NSUserDefaults
    在屏幕之间进行通信,以确定项目是否从该屏幕弹出
  • [tableView reloadData]
    将出现在
    视图中
  • 检查
    单元格中的NSUserDefaults值,然后使用
    单元格.backgroundColor
    或其他内容修改该单元格
  • 您需要拨打:

    [tableView deselectRowAtIndexPath:indexPath animated:YES];
    

    这可以在UITableView的didSelectRowAtIndexPath委托方法中找到。

    如果您在ViewWillDisplay:中选择它,则应在用户看不到它的情况下将其选中。这能解决你的问题吗?

    如果没有一些代码,我可以给你一个建议:停止使用
    [tableView reloadData]
    ,使用
    [tableView BeginUpdate]
    [tableView endUpdates]
    插入RowsatindExpaths:withRowAnimation:
    重新加载RowsatindExpaths:withRowAnimation:
    。事情应该按预期进行。

    我假设您使用的是表视图控制器,否则编写这种行为是您的责任。不过,在表视图控制器中,这很容易。只需添加viewDidLoad:

    self.clearsSelectionOnViewWillAppear = NO;
    
    这将保持选中该行,除非您手动取消选择该行或用户选择表中的另一行。

    这是可能的:

    只有一种情况:如果TAbleView中有静态内容

    just reload the TableView in ViewDidLoad only, not in View will Appear.
    
    
    whereas make sure, you don't allow table to reload anywhere in same class in any method. Then you can achieve what you want.
    
    由于重新加载TAbleView,单元格被取消选择。

    但对于动态内容,您需要使用委托方法:

    - (void)selectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UITableViewScrollPosition)scrollPosition;
    

    在这种情况下,您需要通过与tableviewposition相同的ScrollPosition来传递要显示为selected的indexPath。

    所说的selected,是指高亮显示吗?出于语义方面的考虑,API将ChrisP想要的状态调用为“selected”。视觉外观是一个亮点,但苹果将其视为一种选择。例如“setSelected:”、“didSelectRowAtIndexPath:”等等。这是不正确的。查看我的答案,了解如何保持表格视图单元格高亮显示,并在页面转换期间保持高亮显示。这就是我尝试的,并且重新选择对用户可见。我希望视图与已选择的行一起显示,就像用户离开屏幕向下钻取到子屏幕时一样。这如何帮助解决当用户从子视图返回到主视图时选择行的目标?这是否会导致不选择该行?