Iphone 滚动tableview而用户不注意
我需要在RootController的初始加载时滚动一个tableview。问题是,我必须等到CellForRowatineXpath完成后,才能使用ScrollToRowatineXpath执行任何操作。CellForRowatineXpath似乎是我加载表后最后一个要挂接的事件。因为视图已经加载,所以表是可见的,因此滚动是可见的。我需要一些方法,使表加载,滚动和淡入淡入或什么,使它不只是弹出 目标是当tableview最初显示时,让tableview位于第五行。我现在当然可以这样做,但是用户看到了滚动动作。滚动动作是我想要在视图初始加载时隐藏的 我确实有一个类级变量来跟踪CellForRowatineXpath中的最后一个索引,所以我不会为每个CellForRowatineXpath迭代触发ScrollToRowatineXpathIphone 滚动tableview而用户不注意,iphone,cocoa-touch,uitableview,Iphone,Cocoa Touch,Uitableview,我需要在RootController的初始加载时滚动一个tableview。问题是,我必须等到CellForRowatineXpath完成后,才能使用ScrollToRowatineXpath执行任何操作。CellForRowatineXpath似乎是我加载表后最后一个要挂接的事件。因为视图已经加载,所以表是可见的,因此滚动是可见的。我需要一些方法,使表加载,滚动和淡入淡入或什么,使它不只是弹出 目标是当tableview最初显示时,让tableview位于第五行。我现在当然可以这样做,但是用户
欢迎您提出任何其他建议。我不知道这是否是您想要的,也许我不理解您的意图,但下面是: 如果是cellForRow。。。您认为需要挂接到,显然这将被调用几次,并且您必须知道上次调用它的时间(表视图将为所有可见行调用它,可能还有视图框架外的一行或两行)。在对该方法的每次调用结束时,触发一个延迟的方法调用(延迟地执行废话),但在cellForRow的开头。。。方法,取消该延迟执行。这样,当上次为表单元格的初始加载调用该方法时,将延迟调用helper方法,该方法将滚动表等 我相信myTableView.hidden=YES将有助于启动,然后在滚动完成后设置为“NO”。问题隐藏=是对tableview没有影响。它是一个连接的IB插座
您可能希望在ViewWillAspect(或DidAspect)中设置一个类属性,以指示是否要执行延迟的滚动操作,并在执行滚动操作后清除该属性。我不知道这是否是您正在寻找的,也许我不理解您的意图,但下面是: 如果是cellForRow。。。您认为需要挂接到,显然这将被调用几次,并且您必须知道上次调用它的时间(表视图将为所有可见行调用它,可能还有视图框架外的一行或两行)。在对该方法的每次调用结束时,触发一个延迟的方法调用(延迟地执行废话),但在cellForRow的开头。。。方法,取消该延迟执行。这样,当上次为表单元格的初始加载调用该方法时,将延迟调用helper方法,该方法将滚动表等 我相信myTableView.hidden=YES将有助于启动,然后在滚动完成后设置为“NO”。问题隐藏=是对tableview没有影响。它是一个连接的IB插座
您可能希望在ViewWillAspect(或DidAspect)中设置一个类属性,以指示是否要执行延迟的滚动操作,并在执行滚动后清除该属性。尝试覆盖视图控制器中的ViewWillAspect并在那里设置视图。这在视图初始化后但在显示之前调用。请注意,每次显示视图时(包括返回导航或取消模式弹出窗口),都会调用此函数,因此如果您只想在第一次创建视图时滚动,则可能需要使用标志,如下面的代码示例所示
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear: animated];
if (!alreadyDisplayed) {
// now scroll to the right row
[self.tableView
scrollToRowAtIndexPath: [NSIndexPath indexPathForRow: 5 inSection: 0]
atScrollPosition: UITableViewScrollPositionTop animated: NO];
alreadyDisplayed = true;
}
}
尝试覆盖视图将出现在视图控制器中,并在那里设置视图。这在视图初始化后但在显示之前调用。请注意,每次显示视图时(包括返回导航或取消模式弹出窗口),都会调用此函数,因此如果您只想在第一次创建视图时滚动,则可能需要使用标志,如下面的代码示例所示
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear: animated];
if (!alreadyDisplayed) {
// now scroll to the right row
[self.tableView
scrollToRowAtIndexPath: [NSIndexPath indexPathForRow: 5 inSection: 0]
atScrollPosition: UITableViewScrollPositionTop animated: NO];
alreadyDisplayed = true;
}
}
作为这个领域的新手,我认为这个问题可以像这样很容易地解决
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if(!firstTime){
[NSTimer scheduledTimerWithTimeInterval:0.0 target:self selector:@selector(timerFired:) userInfo:nil repeats:NO];
}
}
- (void) timerFired:(NSTimer *)aTimer{
firstTime = YES;
[aTimer invalidate];
[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:([self.tableView numberOfRowsInSection:0]-1) inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:NO];
}
希望这能有所帮助。作为这个领域的新手,我认为这个问题可以像这样很容易地解决
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
if(!firstTime){
[NSTimer scheduledTimerWithTimeInterval:0.0 target:self selector:@selector(timerFired:) userInfo:nil repeats:NO];
}
}
- (void) timerFired:(NSTimer *)aTimer{
firstTime = YES;
[aTimer invalidate];
[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:([self.tableView numberOfRowsInSection:0]-1) inSection:0] atScrollPosition:UITableViewScrollPositionBottom animated:NO];
}
希望这有帮助。我已经更新了问题,以反映我正在跟踪cellForRow迭代。我相信我已经用延迟方法完成了你的建议。我在查找最后一个cellForRow迭代时没有任何问题。唯一的问题是隐藏滚动动作。我已经更新了问题以反映我正在跟踪cellForRow迭代。我相信我已经用延迟方法完成了你的建议。我在查找最后一个cellForRow迭代时没有任何问题。唯一的问题是隐藏滚动动作。