xcode,在退出序列时重新加载表视图

xcode,在退出序列时重新加载表视图,xcode,tableview,segue,Xcode,Tableview,Segue,我试图在退出序列后重新加载表视图的值。过程是:我从纵断面选择视图手动执行顺序,添加新的纵断面名称,返回纵断面选择视图。然后我想重新加载表视图,添加新的概要文件名。它运行的代码很好(与场景中的原始条目代码相同),但我似乎无法使用numberOfRowsInSection和numberOfRowsInSection的本机方法来重新填充表视图。实际上,在更新新的配置文件名称之前,我必须离开屏幕并重新输入它。有什么想法吗 //**手动执行顺序 -(IBAction)buttonAddNewProfil

我试图在退出序列后重新加载表视图的值。过程是:我从纵断面选择视图手动执行顺序,添加新的纵断面名称,返回纵断面选择视图。然后我想重新加载表视图,添加新的概要文件名。它运行的代码很好(与场景中的原始条目代码相同),但我似乎无法使用numberOfRowsInSectionnumberOfRowsInSection的本机方法来重新填充表视图。实际上,在更新新的配置文件名称之前,我必须离开屏幕并重新输入它。有什么想法吗


//**手动执行顺序

-(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,我应该删除:)