uitableviewcellのuitextfieldサブビューが最初の応答者になりますか?
-
27-09-2019 - |
質問
ナビゲーションコントローラーを使用して詳細ビューにドリルダウンするコアデータアプリケーションがあり、その後、データの行の1つを編集すると、リンゴCoredatabooksのように、その単一行の編集ビューに表示されます。例(coredatabooksを除くaのみを使用します UITextField
それ自体で、のサブビューではありません UITableViewCell
私のもののように)!
編集ビューはaです UITableviewController
単一のセクションの単一行と UITextfield
セルでは、プログラムで。
私が起こりたいのは、編集する行を選択し、編集ビューがNAVスタックにプッシュされ、編集ビューが画面を横切って移動するとき、テキストフィールドをFIRSTRESPONDERとして選択して、キーボードがすでに表示されているようにしたいビューが画面を横切って移動して位置を取るにつれて。連絡先アプリのように、またはCoreDataBooksアプリのように。
私は現在、私のアプリに次のコードを持っているため、ビューがロードされ、キーボードが表示されます(これは私が望むものではなく、キーボードをすでにそこにしたいです)
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[theTextField becomeFirstResponder];
}
これを入れることはできません -viewWillAppear
テキストフィールドはまだ作成されていないためです theTextField
ニルです。 CoreDataBooksアプリでは、私が欲しいものを実現している場所で、彼らはペン先からビューをロードして、同じコードを使用しますが -viewWillAppear
テキストフィールドがすでに作成されているように!
とにかくペン先を作成せずにこれを回避することはありますか?私は実装プログラムを維持して、より大きな柔軟性を可能にしたいと思います。
どうもありがとう
解決
Apple Devサポートチームと話をした後、答えがあります!
あなたがする必要があるのは、オフスクリーンを作成することです UITextField
の -(void)loadView;
そして、それを最初のレスポンダーとして設定します viewDidLoad
メソッドを設定できます UITextField
の中に UITableViewCell
最初の応答者になること。ここにいくつかの例コードがあります(私がこれをやっていることを覚えています UITableViewController
だから私もテーブルビューを作成しています!
- (void)loadView
{
[super loadView];
//Set the view up.
UIView *theView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.view = theView;
[theView release];
//Create an negatively sized or offscreen textfield
UITextField *hiddenField = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, -10, -10)];
hiddenTextField = hiddenField;
[self.view addSubview:hiddenTextField];
[hiddenField release];
//Create the tableview
UITableView *theTableView = [[UITableView alloc] initWithFrame:[[UIScreen mainScreen] bounds] style:UITableViewStyleGrouped];
theTableView.delegate = self;
theTableView.dataSource = self;
[self.view addSubview:theTableView];
[theTableView release];
//Set the hiddenTextField to become first responder
[hiddenTextField becomeFirstResponder];
//Background for a grouped tableview
self.view.backgroundColor = [UIColor groupTableViewBackgroundColor];
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
//Now the the UITableViewCells UITextField has loaded you can set that as first responder
[theTextField becomeFirstResponder];
}
これが私と同じ位置に立ち往生するのに役立つことを願っています!
他の誰かがこれを行うためのより良い方法を見ることができるなら、言ってください。
他のヒント
viewdidappearメソッドでやってみてください、私のために働いてください。
明らかな解決策は、テキストフィールドを作成することだと思います init
ビューコントローラーの方法。ビューコントローラーには人口型ビュープロパティが必要なため、通常、ビューを構成する場所です。
次に、テキストフィールドを最初の応答者として設定できます viewWillAppear
そして、ビューがスライドするときにキーボードが表示される必要があります。
UinavigationController Delegateメソッドを使用してみましたか?:
NavigationController:WillshowViewController:Animated: