如何使用故事板或segues,协议和方法将数据从我的第二个视图控制器传回我的第一个视图控制器代表?

时间:2013-03-05 15:41:11

标签: objective-c xcode storyboard uistoryboardsegue navigationcontroller

这是我的第一篇文章&无法上传图片,因为我需要10点声望,XD但它确实如此:

enter image description here

嗨大家好,我需要从我的第二个或儿童视图控制器的桌面视图中将我的单元格中的label.text传递给我的第一个或父视图控制器,我想要推入一个单元格和一个单元格。从我的第一个视图控制器返回字符串加载到标签中,我确实使用了故事板中的segues,我确实使用了协议&代表,但没有工作,在另一个问题,答案或例子是我需要的,或者是xcode版本的非常不同的方式,或者如何做到这一点的最佳方式?,在图片中我使用一个按钮转到下一个视图控制器,在我的第一个视图控制器中选择我想要的标签文本,我使用的是xcode 4.6&故事板& ARC也是,&一些代码行已被弃用,请各位帮帮我! &安培;非常感谢!!!,

来自BOLIVIA的问候!!! N_N'

代码是这样的:

     @interface FirstViewController : UIViewController <SecondTableViewControllerDelegate>

    @property (copy, nonatomic) NSString *displayText;
    @property (weak, nonatomic) IBOutlet UILabel *displayLabel;
    @property (strong, nonatomic)IBOutlet UIButton *Next;

    @end

    @interface FirstViewController ()

@end

@implementation FirstViewController
@synthesize Next;


    -(void)viewDidLoad
    {
        [super viewDidLoad];
        if (![[NSUserDefaults standardUserDefaults] objectForKey:@"FIRST_TIME"])
        {
            NSLog(@"ES PRIMERA VEZ");
            [Next sendActionsForControlEvents:UIControlEventTouchUpInside];
        }
        else
        {
            NSLog(@"NO ES PRIMERA VEZ");
        }


    }

    - (void)viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];

        if (self.displayText)
        {
            self.displayLabel.text = self.displayText;
        } else {
            self.displayLabel.text = kDefaultDisplayText;
        }
    }

    #pragma mark - Delegate methods

    - (void)updateText:(NSString *)text {
        self.displayText = text;
    }

    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
        if (![segue.identifier isEqualToString:@"toSecondTableview"]) {
            return;
        }
        /*
        SecondTableViewController *destinationController = segue.destinationViewController;
        destinationController.delegate = self;
        destinationController.editText = self.displayText;
        */

        //-- if I pass data from the first view controller to the second right?

    }

    @end

in the second view

    @protocol SecondTableViewControllerDelegate <NSObject>

    @optional
    - (void)updateText:(NSString *)text;

    @end

    @interface SecondTableViewController : UIViewController<UITableViewDelegate, UITableViewDataSource>

    @property (weak, nonatomic) id<SecondTableViewControllerDelegate> delegate;
    @property (copy, nonatomic) NSString *editText;
    @property (weak, nonatomic) IBOutlet UITableView *myTable;


    @interface SecondTableViewController ()

    @end

    @implementation SecondTableViewController

    -(void)viewDidLoad
    {
        [super viewDidLoad];
        [[NSUserDefaults standardUserDefaults] setObject:@"NO" forKey:@"FIRST_TIME"];

         //---how use the UItable Methods?, how use the protocol method?
    }


    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        return self.myArray.count;
    }

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *CellIdentifier = @"myArray";

        myArrayCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

        NSDictionary *conjunto = [self.jogArray objectAtIndex:indexPath.row];

        cell.myLabel.text = [conjunto objectForKey:@"prueba"];


        return cell;
    }

或协议代表必须在另一个视图控制器中?我想在标签上显示来自下一个视图控制器的任何细胞的文本我将如何做?

1 个答案:

答案 0 :(得分:0)

我会使用委托模式。 使用文本为handet的方法定义协议。

- (void) labelText:(NSString*)text;

左右。 让partent视图控制器实现协议。我们假设它被称为YourProtocol。 在子视图中,controler声明类型为(id)<YourProtocol>的委托属性。 在partent视图中,控制器将self分配给childControler.delegate。 当它要分配文本时,请仔细检查委托是否转发协议或响应selctor labelText:然后只需调用它。

听起来比实际更多,它有点'干净'。