导航控制器有两个视图:第一个视图,有空文本字段,第二个视图是用户可以选择行的表视图。只需触摸一行,就会有一个动作将值设置为第一个视图的文本字段。不幸的是,当我回到第一个视野时,没有设置。
这是我的代码:
FirtViewController.h
@interface FirstViewController : UIViewController
{
UITextField *firstField;
UITextField *secondField;
}
@property(nonatomic, retain) IBOutlet UITextField *firstField;
@property(nonatomic, retain) IBOutlet UITextField *secondField;
@property(copy) NSString *selectedRow;
-(IBAction)showTable:(id)sender
FirstViewController.m
#import "FirstViewController.h"
#import "AppDelegate.h"
#import "SecondViewController.h"
@implementation FirstViewController
@synthesize .....
.............
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
self.firstField.text = selectedRow;
}
-(IBAction)showTable:(id)sender
{
SecondViewController *controllerSecond = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
[self.navigationController pushViewController:controllerSecond animated:YES];
}
SecondViewController.h
@class FirstViewController;
@interface ListaViewController : UIViewController
<UITableViewDataSource, UITableViewDelegate, UISearchBarDelegate>
{
UITableView *table;
UISearchBar *search;
FirstViewController *controller;
}
@property (nonatomic, retain) FirstViewController *controller;
SeconViewController.m
- (void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *selectedRow = [tableData objectAtIndex:indexPath.row];
controller.selectedRow = selectedRow;
[self.navigationController popViewControllerAnimated:YES];
}
答案 0 :(得分:1)
根据您上面的代码,您永远不会将secondViewController中的连接设置回第一个 你可能需要这样的东西:
-(IBAction)showTable:(id)sender
{
SecondViewController *controllerSecond = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
[controllerSecond setController:self]; //this sets the reference back
[self.navigationController pushViewController:controllerSecond animated:YES];
}
答案 1 :(得分:0)
我不确定我完全理解您的意思,但为什么不在NSString
中创建包含所需值的SecondViewController
。这样,当您设置SecondViewController
。
SecondViewController *nextView = [[SecondViewController alloc] init];
nextView.myNSString = @"Value you need in the next view";
然后在SecondViewController.h中,您将能够像这样访问NSString:
@NSLog(@"%@", self.myNSString);
答案 2 :(得分:0)
您缺少的主要内容是视图之间传递的值。您没有在任何将值传递给另一个视图的视图中使用任何对象。比如,如果要将文本从FirstViewController传递给SecondViewController。你可以像下面这样做。
NSString *textToPass = self.firstField.text;
在你的SecondViewController中,需要一个字符串对象,如passText。在firstViewController中创建secondViewController的对象时,请按以下步骤操作:
SecondViewController *controllerSecond = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
controllerSecond.passedText = textToPass;
[self.navigationController pushViewController:controllerSecond animated:YES];
现在无论您想要显示第一个屏幕的文本,只需使用“passtext”字符串。
希望它有所帮助。 :)
===============================================
在您的代码中,您可以尝试以下修改:
NSString *selectedRow = [tableData objectAtIndex:indexPath.row];
controller = (FirstViewController *)[self.navigationController topViewController];
controller.selectedRow = selectedRow;
[self.navigationController popViewControllerAnimated:YES];
它将解决您的问题。
答案 3 :(得分:0)
您需要使用的是委托。它是Object-C中非常常用的模式。看看我对SO post的回答。如果你还需要代码,请告诉我。