从tableview将数据传递回Viewcontroller

时间:2017-01-10 06:15:33

标签: ios objective-c iphone xcode uitableview

我有ViewController和TableViewController。在ViewController中我有2个按钮和2个文本字段,当点击button1时,它将导航到UITableView,静态数据如(Apple,Samsung,Blackberry,Windows),点击button2将导航到UITableView静态数据(Doctor,Engineer,商人,员工)当我选择任何一行时,它应该显示在button1的textfield1中,单击button2的textField2并单击ViewController。以下是我在学习时所尝试的,我不知道它是否正确。

CustomerVC.h

#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
    - (IBAction)button1Click:(id)sender;
   @property (strong, nonatomic) IBOutlet UITextField *txtField1;

    - (IBAction)button2Click:(id)sender;
    @property (strong, nonatomic) IBOutlet UITextField *txtField2;



CustomerTableVC.h

#import <UIKit/UIKit.h>
    @interface DetailsViewController : UITableViewController
@end

CustomerTableVC.m

#import "DetailsViewController.h"
@interface DetailsViewController ()
{
    NSArray *array1,*array2;
}
@end

@implementation FamilyDetailsViewController

- (void)viewDidLoad {
    [super viewDidLoad];

     array1=[[NSArray alloc]initWithObjects:@"Apple",@"Samsung",@"Blackberry",@"Windows", nil];

    array2=[[NSArray alloc]initWithObjects:@"Doctor",@"Engineer",@"Businessman",@"Employee", nil];
}

#pragma mark - Table view data source

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

    return 1;
}

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

    return [array1 count];
    return [array2 count];
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    cell.textLabel.text=[arrqy1 objectAtIndex:indexPath.row];
cell.textLabel.text=[arrqy2 objectAtIndex:indexPath.row];

    return cell;
}

#pragma mark - Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    [self.navigationController popViewControllerAnimated:YES];
}

2 个答案:

答案 0 :(得分:1)

您应该使用Unwind segue从tableview控制器传回数据..

要遵循的步骤:

假设A&amp; B是两个控制器,您首先使用一些数据从A导航到B.现在你想用一些数据从B到A进行POP。

Unwind Segues是最好的推荐方式。 以下是步骤。

  1. 打开A.m
  2. 定义以下方法

    @IBAction func unwindSegueFromBtoA(segue: UIStoryNoardSegue) {
    
    }
    
  3. 打开故事板

  4. 选择B ViewController并单击ViewController outlet。按下控制键并拖动到“退出”键。插座,让鼠标留在这里。在下图中,所选图标为ViewController插座,最后一个带退出标志的图标为Exit Outlet。

  5. 您将看到“unwindSegueFromBtoA&#39;弹出窗口中的方法。选择此方法。

  6. 现在,您将在左侧的视图控制器层次结构中看到一个segue。您将在下面的图片中看到您在StoryBoard Entry Piont附近创建的segue。

  7. You View Hierarchy

    1. 选择此项并为其设置标识符。 (建议设置与方法相同的名称 - unwindSegueFromBtoA)

    2. 开放B.m.现在,无论您想要弹出哪个A.使用

      self.performSegueWithIdentifier("unwindSegueFromBtoA", sender: dataToSend)
      
    3. 现在,当您弹出&#39; A&#39;,&#39; unwindSegueFromBtoA&#39;方法将被调用。在&#39; A&#39;的unwindSegueFromBtoA中您可以访问&#39; B&#39;

    4. 的任何对象

      那就是......!

答案 1 :(得分:0)

尝试使用委托。 1.在Tableview控制器上声明代表。

自定义视频

  1. 声明FamilyViewController.delegate = self;
  2. self.view presentviewcontroller = familyviewController;
  3. 定义委托功能(例如detailsselected()
  4. detailsSelected dismissViewController内。
  5. FailyDetailsViewController

    1. didselectRowAtIndexPath :内拨打&#34; detailsSelected&#34;功能并传递选定的值。