質問

ナビゲーションコントローラーを使用して詳細ビューにドリルダウンするコアデータアプリケーションがあり、その後、データの行の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:

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top