编辑 1
在我尝试使用codeInOrange
's answer 到目前为止,我正在添加一些代码来指示其状态,到目前为止,它的行为就像我的代码最初的行为一样,即示例链接首先显示在文本字段中,并且可以由用户更改,但是当用户返回 VC 时,任何新的链接文本都已被原始示例链接替换。我发布此附加代码的原因是尝试重新连接codeInOrange
' 有希望的答案,因为我误解了他最初的建议和他后来的评论的逻辑流程。
在当前的情节提要中,我将文本字段和占位符文本留空,因为下面的方法似乎充分提供了示例链接viewDidLoad
。
- (void)viewDidLoad
{
[super viewDidLoad];
self.urlNameInput.text = @"sample http";
// Do any additional setup after loading the view, typically from a nib.
self.urlNameInput.clearButtonMode = UITextFieldViewModeAlways;
self.urlNameInput.clearsOnBeginEditing = NO;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
if (textField == self.urlNameInput) {
[textField resignFirstResponder];
[self processPbn];
}
return YES;
}
- (void)viewDidAppear:(BOOL)animated
{
AppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
// self.urlNameInput.text = appDelegate.stringForTextField;
appDelegate.stringForTextField = self.urlNameInput.text;
}
- (void) processPbn
{
NSURLRequest *theRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:self.urlNameInput.text] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
[NSURLConnection sendAsynchronousRequest:theRequest queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *connection, NSData *data, NSError *error)
{
// lots of detail code has been elided in this method
self.iboard = 0;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:toMatch options:NSRegularExpressionDotMatchesLineSeparators error:&error];
for (NSTextCheckingResult* board in [regex matchesInString:string options:NSRegularExpressionDotMatchesLineSeparators range:NSMakeRange(0, [string length])])
{
if (self.iboard>0) {
AppDelegate *appDelegate = [UIApplication sharedApplication].delegate;
appDelegate.stringForTextField = self.urlNameInput.text;
}
}];
}
编辑 1
编辑 0
我不想在应用程序关闭和启动之间保留文本,所以使用的答案NSUserDefaults
并不是我所需要的。
此外,从我的试验看来,Michael Dautermann 建议的解决方案建议将我的初始化文本放入 XibviewDidLoad
或 Storyboard 中或中,这不起作用,因为文本在返回 VC 时总是返回到其初始值(可能是因为viewDidLoad
方法被触发),所以我认为我确实需要在我的 AppDelegate.m 中创建一个 ivar,正如我在原始问题中所问的那样,而不是在我的 ViewController.mviewDidLoad
中,以获得所需的结果,显然。也许在 AppDelegate.m 中创建一个 B00L ivar 会更容易,它是一个标志,指示是否需要原始文本或当前文本。但我也不知道该怎么做。因此,请在您的答案中考虑此编辑。
编辑 0
我的 AppDelegate.m 包含以下代码。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
BDViewController *vc = [sb instantiateInitialViewController];
self.viewController = (id)vc;
}
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
}
在 VC 中,我希望在启动时设置一个 ivar,一个 NSString,以便它可以是我的 UITextField 中的示例文本。稍后,当用户向 UITextField 提供有效文本时,我希望将 UITextField 调整为新值。
目前在我的 VC.h 中,声明文本字段并在 VC.m 中合成如下。
@property (nonatomic, strong) UITextField *urlNameInput;
@synthesize urlNameInput;
我尝试将以下代码放入didFinishLaunchingWithOptions:
,但在运行应用程序时没有看到所需的文本。
self.viewController.urlNameInput.text = @"example http";
如何以编程方式完成初始化 UITextField 的目标?