編集 1
codeInOrange
これまでのところ、私のコードが最初に動作したように動作します。つまり、サンプル リンクが最初にテキスト フィールドに表示され、ユーザーが変更できます。、ただし、ユーザーが 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
は必要なものではありません。
viewDidLoad
また、私の試行から、私の初期化テキストをXib または Storyboard のいずれかに配置することを提案する Michael Dautermann によって提案された解決策が機能しないように見えます。メソッドがトリガーされます)、したがって、目的の結果を得るには、ViewController.mではなく、元の質問で尋ねたように、AppDelegate.m に ivar を作成する必要があるviewDidLoad
と思います。おそらく、元のテキストまたは現在のテキストが必要かどうかを示すフラグである B00L ivar を AppDelegate.m に作成する方が簡単でしょう。しかし、それを行う方法もわかりません。したがって、回答でこの編集を検討してください。viewDidLoad
編集 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 では、NSString である ivar を起動時に設定して、UITextField のサンプル テキストにできるようにしたいと考えています。後で、ユーザーが有効なテキストを UITextField に入力したときに、その UITextField を新しい値に調整したいと考えています。
現在、私の VC.h では、テキスト フィールドが宣言され、次のように VC.m で合成されています。
@property (nonatomic, strong) UITextField *urlNameInput;
@synthesize urlNameInput;
次のコードを入れてみましdidFinishLaunchingWithOptions:
たが、アプリを実行しても目的のテキストが表示されません。
self.viewController.urlNameInput.text = @"example http";
UITextField を初期化するという目標をプログラムで達成するにはどうすればよいですか?