xcode,在退出序列时重新加载表视图
我试图在退出序列后重新加载表视图的值。过程是:我从纵断面选择视图手动执行顺序,添加新的纵断面名称,返回纵断面选择视图。然后我想重新加载表视图,添加新的概要文件名。它运行的代码很好(与场景中的原始条目代码相同),但我似乎无法使用numberOfRowsInSection和numberOfRowsInSection的本机方法来重新填充表视图。实际上,在更新新的配置文件名称之前,我必须离开屏幕并重新输入它。有什么想法吗xcode,在退出序列时重新加载表视图,xcode,tableview,segue,Xcode,Tableview,Segue,我试图在退出序列后重新加载表视图的值。过程是:我从纵断面选择视图手动执行顺序,添加新的纵断面名称,返回纵断面选择视图。然后我想重新加载表视图,添加新的概要文件名。它运行的代码很好(与场景中的原始条目代码相同),但我似乎无法使用numberOfRowsInSection和numberOfRowsInSection的本机方法来重新填充表视图。实际上,在更新新的配置文件名称之前,我必须离开屏幕并重新输入它。有什么想法吗 //**手动执行顺序 -(IBAction)buttonAddNewProfil
//**手动执行顺序
-(IBAction)buttonAddNewProfile:(id)sender
{
// creating object for profile selection screen
UIStoryboard *ProfileSelectionStoryboard=[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
// creating object for add new profile storyboard
AddNewProfileViewController *addnewprofileVC=[ProfileSelectionStoryboard instantiateViewControllerWithIdentifier:@"Add New Profile"];
// setting the transition style
addnewprofileVC.modalTransitionStyle=UIModalTransitionStylePartialCurl;
// performing the segue
[self presentViewController:addnewprofileVC animated:YES completion:nil];
// performing new table view load on return from new profile
[self loadUsers];
}
//**函数加载新的配置文件名
-(void)loadUsers
{
// retreiving the users from the database
SQLiteFunctions *sql = [[SQLiteFunctions alloc] init];
// testing for successful open
if([sql openDatabase:@"users"])
{
// setting query statement
const char *query = "SELECT * FROM users;";
// testing for that profile name existing already
if([sql getUserRecords:query] > 0)
{
// initializing array
NSMutableArray *names = [[NSMutableArray alloc] init];
// loop through object compling an array of user names
for(Users *ProfileUser in sql.returnData)
{
// adding user name to the listview array
[names addObject:ProfileUser.user_name];
}
// setting table view array to local array
tableData = names;
}
}
}
//**方法重新加载表视图
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
{
// returning the number of rows in the table
return [tableData count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
{
// setting up the table view cells for data population
UITableViewCell *cell = nil;
cell = [tableView dequeueReusableCellWithIdentifier:@"MyCell"];
// testing for cell parameters
if (cell == nil)
{
// setting up cloned cell parameters
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"MyCell"];
}
// setting cell values to the array row value
cell.textLabel.text = [tableData objectAtIndex:indexPath.row];
// returning the current row label value
return cell;
}
您在这里有几个不同的选项: 1) 最简单的方法是在每次视图控制器即将显示其视图时重新加载表:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.tableView reloadData];
}
但缺点是,即使不一定需要重新加载数据,也会在每次显示视图时执行该操作
2) 如果您使用的是storyboard并以iOS 6+为目标,那么当从添加纵断面图控制器返回时,您可以使用展开序列调用视图控制器上的特定方法。有关更多信息,请参阅此SO问题/答案:
3) 如果您的目标是较旧版本的iOS或不使用故事板,那么您可以创建一个协议,其中包含一个在添加新配置文件时应调用的方法,并且可以在调用该方法时重新加载数据。这里有很多问题,包括如何做(比如它显示了如何传递数据,但是你可以做同样的事情来调用一个方法)。这是lnafzinger在上面的评论中给出的实际答案。再次感谢
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.tableView reloadData];
}
我花了一点时间才弄明白,但这是因为你正在使用 UIModalTransitionStylePartialCurl modalTransitionStyle。我猜 他们不叫它,因为它没有完全离开屏幕。如果 您使用不同的样式(如默认样式),然后它将调用 视图将出现。如果你想继续这样,那你应该 可能使用其他方法之一伊纳夫齐格
这太完美了,谢谢。你的链接也很有用,因为我在一个导航密集型应用程序中使用了很多segues。我一直在寻找一种优雅的方式来避免新视图的不断实例化,而是拥有一个“家”视图,作为序列的中心点。刚刚有机会再次回到我的电脑后面。根据调试器,此方法在退出segue时不会被命中-(void)ViewWillDisplay:(BOOL)动画{[super ViewWillDisplay:animated];[self-loadUsers];[self.userTableView-reloadData];}它在我第一次打开视图时进入,但没有退出segue。真的吗?应该是。您将其放在原始视图控制器中,而不是添加配置文件控制器中,对吗?我花了一些时间才弄明白这一点,但这是因为您使用的是
uimodaltransationstylepartialcurl
modaltransationstyle
。我猜他们不会叫它,因为它没有完全离开屏幕。如果使用不同的样式(如默认样式),则它将调用viewwillbeen
。如果你想继续这样做,那么你可能应该使用其他方法之一。顺便说一句,由于这在技术上不是一个答案,你应该编辑你的原始问题并在那里添加代码,而不是将其放入答案中。大多数人不会看答案来了解更多类似的细节。UIModalTransitionStyleFlipHorizontal和UIModalTransitionStyleCrossDissolve工作正常。其他的我都没试过。欢迎来到永无止境的问题-(void)viewwillbeen:(BOOL)动画作品很好
。你不能从中启动另一个segue,你需要使用-(void)viewdideappease:(BOOL)animated
我想旧segue还没有完全完成?实际上,segue不是原始问题的一部分。如果你对此有问题,你可以问另一个问题!:)另外,如果你想让我帮你得到分数,因为我给了你答案,你需要接受我的答案而不是你的答案……很抱歉,你刚才提到的另一篇文章中提到了segue,我应该删除:)