我想在完成表演后滚动到UITableView的底部 [self.tableView reloadData]
我原本有
[self.tableView reloadData]
NSIndexPath* indexPath = [NSIndexPath indexPathForRow: ([self.tableView numberOfRowsInSection:([self.tableView numberOfSections]-1)]-1) inSection: ([self.tableView numberOfSections]-1)];
[self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];
Run Code Online (Sandbox Code Playgroud)
但后来我读了reloadData是异步的,所以滚动不因为发生self.tableView,[self.tableView numberOfSections]并且[self.tableView numberOfRowsinSection都是0.
谢谢!
有什么奇怪的是我正在使用:
[self.tableView reloadData];
NSLog(@"Number of Sections %d", [self.tableView numberOfSections]);
NSLog(@"Number of Rows %d", [self.tableView numberOfRowsInSection:([self.tableView numberOfSections]-1)]-1);
Run Code Online (Sandbox Code Playgroud)
在控制台中它返回Sections = 1,Row = -1;
当我完成相同的NSLogs时,cellForRowAtIndexPath我得到Sections = 1和Row = 8; (8是对的)
有没有办法找出什么时候UITableView从数据源请求数据?
相关视图控制器()的viewDidLoad/ viewWillAppear/ viewDidAppear方法UITableViewController都没有在这里使用,因为它们都过早发生.它们(完全可以理解)都不保证对数据源的查询暂时完成(例如,直到滚动视图).
一个解决办法,我发现是调用reloadData的viewDidAppear,因为当reloadData返回时,表视图是保证完成尽可能多的,因为它需要暂时查询的数据源.
但是,这看起来相当令人讨厌,因为我认为这是因为reloadData它首次加载时会导致数据源被要求提供相同的信息两次(一次是自动的,一次是因为调用).
我想要这样做的原因是我想要保留 - 的滚动位置UITableView- 但是直到像素级别,而不仅仅是最近的行.
当恢复滚动位置(使用scrollRectToVisible:animated:)时,我需要表视图中已经有足够的数据,否则scrollRectToVisible:animated:方法调用什么都不做(如果您将调用单独放在任何一个中viewDidLoad,则会发生这种情况,viewWillAppear或者viewDidAppear).
在Apple的消息应用程序中,当您单击通讯员的名称并切换到对话的表格视图(每个消息都有气球)时,表格会一直滚动到最后.没有动画或任何东西,它就在那里.
同样,在Tweetie 2中,当您加载推文视图时,它会显示在您上次查看它的位置.没有动画到达那里,它就在那里,好像上面没有任何单元格被加载.
这些应用程序如何做到这一点?他们scrollToRowAtIndexPath:atScrollPosition:animated:在桌面控制器的某个地方打电话吗?如果是这样,他们怎么知道要传递给atScrollPosition:谁?它叫什么方法?
当我开始想知道UITableView中的"beginUpdates"和UICollectionView中的"performBatchUpdates"是否具有相同的行为时,我正在浏览文档.如果是这样,有没有理由,他们被称为不同,即使他们几乎是一样的东西?
谢谢!
我在这个表格视图中有一个数字列表.

如您所见,数字会重复出现.让我们将一组重复的数字视为一组.所以有1组,2组等等.
我想要做的是当应用程序启动时,我需要自动滚动到指定组的开始位置.在进一步解释之前,这是我的代码到目前为止.
import UIKit
class TableViewController: UITableViewController, UITableViewDataSource, UITableViewDelegate {
private var scrollToTime = true
private var items = [Int]()
private var groupNoToScroll = 12
override func viewDidLoad() {
super.viewDidLoad()
items = [1, 1, 2, 2, 2, 3, 4, 4, 4, 4, 4, 5, 5, 6, 7, 7, 8, 8, 8, 9, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 13, 13, 14, 14, 14, 14, 15, 15, 16, 17, 17, 18, …Run Code Online (Sandbox Code Playgroud) 我有一个tableView并且需要tableView在重新加载后执行一个功能.我怎么知道是否reloadData已经完成?假设我有方法A填充tableView,一旦[tableView1 reloadData]完成,我想调用methodB.谁能帮我这个?我一直在寻找好几个小时......谢谢!
- (void) methodA
{
NSString *URLa = [NSString stringWithFormat:@"http://www.website.com/page.php?
v1=%@&v2=%@&v3=%@",v1, v2, v3];
NSURL *url = [NSURL URLa];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
(void) [[NSURLConnection alloc] initWithRequest:request delegate:self];
[tableView1 reloadData];
}
Run Code Online (Sandbox Code Playgroud) uitableview ×5
ios ×4
iphone ×3
objective-c ×3
autoscroll ×1
reloaddata ×1
scroll ×1
swift ×1
xcode ×1