0

好吧,这是我的第一篇文章,因为我需要 10 的声誉,所以无法上传图片,XD 但没关系:

在此处输入图像描述

嗨,伙计们,我需要将一个 label.text 从我的第二个或子视图控制器的 tableview 中的单元格传递到我的第一个或父视图控制器,我想推入一个单元格并返回字符串以加载到标签中从我的第一个视图控制器中,我确实使用了故事板中的 segues,我确实使用了协议和委托,但没有工作,在另一个问题中,答案或示例与我需要的相反,或者对于 xcode 版本来说是非常不同的方式,或者最好的方法是如何做到这一点?,在图片中,我使用按钮转到下一个视图控制器,以在我的第一个视图控制器中选择我想要的标签文本,我也使用 xcode 4.6 & storyboard & ARC, &有些代码行已被弃用,请帮帮我!& 多谢!!!,

来自玻利维亚的问候!!!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;
    }

或者协议委托必须在另一个视图控制器中?,我想在标签中显示来自下一个视图控制器的任何单元格的文本我该怎么办?

4

1 回答 1

0

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

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

或者。让部分视图控制器实现协议。假设它被称为YourProtocol. 在子视图控制器中声明类型的委托属性(id)<YourProtocol>。在部分视图控制器中分配selfchildControler.delegate. 当它即将分配文本时,请仔细检查委托是否符合协议或响应选择器 labelText: 然后调用它。

听起来比实际更复杂,而且有点“干净”。

于 2013-03-05T15:48:31.167 回答