如何使用委托将数据从第二个viewcontroller传递到tableviewcontroller

时间:2017-11-17 12:06:46

标签: ios objective-c uitableview uiviewcontroller delegates

我有2 viewcontroller个 - 一个是tableview,另一个是普通viewcontroller。我希望通过使用委托将数据从第二个viewcontroller传递到tableview控制器。我在delegatemethod中创建了一个委托viewcontroller,并在delegatemethod控制器中实现了tableview。问题是我正在向数组中获取数据,但tableview没有重新加载。为什么呢?

任何人都可以帮忙解决这个问题吗?提前谢谢。

    #import "TableViewController.h"

        @interface TableViewController ()<name>{

            NSMutableArray *data;
        }

        @end

        @implementation TableViewController

        - (void)viewDidLoad {
            [super viewDidLoad];
            data = [NSMutableArray array];
            [self.tableView reloadData];
        }

        - (IBAction)callingSecondView:(id)sender {

            UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
            ViewController *var = [storyboard instantiateViewControllerWithIdentifier:@"vc"];
            var.delegate = self;
            [self.navigationController pushViewController:var animated:YES];
        }
        -(void)getdata:(NSString *)name{

            [data addObject:name];
            [self.tableView reloadData];

        }
        #pragma mark - Table view data source

        - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

            return 1;
        }

        - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

            return [data count];
        }
        - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"  forIndexPath:indexPath];

            if (cell != nil) {
                cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cell"];

            }
            cell.textLabel.text = [data objectAtIndex:indexPath.row];
            return cell;
        }

我正在ViewController.h

创建委托对象和协议
        #import <UIKit/UIKit.h>

        @protocol name <NSObject>

        -(void)getdata : (NSString *)name;

        @end


        @interface ViewController : UIViewController
        @property (strong, nonatomic) IBOutlet UITextField *txt;
        - (IBAction)done:(id)sender;

        @property(nonatomic,retain) id<name> delegate;

ViewController.m

        #import "ViewController.h"

        @interface ViewController ()

        @end

        @implementation ViewController
        @synthesize delegate;
        - (void)viewDidLoad {
            [super viewDidLoad];

        }
        - (IBAction)done:(id)sender {

            [delegate getdata:self.txt.text];
            [self.navigationController popToRootViewControllerAnimated:YES];

        }
        @end

1 个答案:

答案 0 :(得分:0)

我认为第一个VC不会重新加载数据,因为它不是可见的VC。当VC出现时尝试reloadData。

-(void) viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [self.tableView reloadData];
}