2011-06-30 3 views
2

私は2つのビューを持っています.1つはテーブルビューと他の詳細ビューです。表内の行が選択されると、詳細ビ​​ューが表示されます。iPhone:ビューを切り替えるときにUITextField、UITextViewを編集できないようにするには

私は、レコードを編集したり、新しいレコードを追加したり、レコードを表示したりするための詳細表示にペンを使用しています。詳細ビューにはUITextFieldとUITextViewがあり、レコードを表示しているときに編集不可能にする必要があります。 didSelectRowAtIndexPathテーブルビューの方法では、私はこれを試しました...

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    // Navigation logic may go here. Create and push another view controller. 
    MemoDetailViewController *memoDetailViewController = [[MemoDetailViewController alloc] initWithNibName:@"MemoDetailViewController" bundle:nil]; 

    memoDetailViewController.memo = [self.resultsController objectAtIndexPath:indexPath]; 

// making the text field and text view uneditable - DID NOT WORK??? 
     memoDetailViewController.memoTitleText.enabled = NO; 
     memoDetailViewController.memoTextView.editable = NO; 

    // Pass the selected object to the new view controller. 
    [self.navigationController pushViewController:memoDetailViewController animated:YES]; 
    [memoDetailViewController release]; 
} 

これは動作しません。テキストフィールドとuitextviewは編集可能なままです。キーボードをタップするとキーボードが表示されます。私はここで何が欠けていますか?

答えて

7

おそらく最も簡単な方法は、それぞれのデリゲートメソッドを使用することです。彼らは同じ名前ですが、名前が異なるだけです。例としてUITextFieldを使用して、基本的なアプローチは、これはあなたがそれを編集し続けるようにしたいときに指定することができます。この

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { 
    if (someCaseWhereYouWantToEdit) { 
     return YES; 
    } else { 
     return NO; 
    } 
} 

でしょうね。

-(void)viewWillAppear:(BOOL)animated { 
    memoDetailViewController.memoTextView.editable = NO; 
} 

-(void)viewWillDisappear:(BOOL)animated { 
    memoDetailViewController.memoTextView.editable = YES; 
} 
:もちろん編集不可能であるべきビューのためのビューコントローラでこれを試してみてください

+0

詳細ビューまたはテーブルビューに移動する必要がありますか?行が選択されたときに、テーブルビューの内部から編集可能な動作を制御する必要があるため、私は尋ねました。 – vikmalhotra

+0

これは設定方法によって異なります。 tableViewを保持するビューコントローラを使用している場合、実装ファイルに入るだけです。 tableViewControllerを使用している場合、その実装ファイルに入ります。このメソッドは、textField(およびそれぞれのメソッドのtextViewも同様です)をクリックするたびに呼び出されるため、編集を続行するか(YESを返すか)、いつ行うべきかを知らせるためにそこに必要なロジックを追加できます表示のみの場合(NOの場合) – justin

0
あなたのヘッダーに自分の委譲としてだけでなく、デリゲートプロトコルをインポート selfで設定したテキストフィールドとのTextViewのインスタンスを持っている必要があります
1

ビューがXIBから読み込まれていないため、これらのプロパティがnilで、メッセージがnilであるため、コードが機能しません。あなたが最初pushViewControllerに順序を変更した場合、これは動作しますが、それは私がBOOLプロパティを宣言することをお勧め、

MemoDetailViewController *memoDetailViewController = [[MemoDetailViewController alloc] initWithNibName:@"MemoDetailViewController" bundle:nil]; 

memoDetailViewController.memo = [self.resultsController objectAtIndexPath:indexPath]; 

[self.navigationController pushViewController:memoDetailViewController animated:YES]; 

memoDetailViewController.memoTitleText.enabled = NO; 
memoDetailViewController.memoTextView.editable = NO; 

[memoDetailViewController release]; 

を動作するはずです。 YESまたはNOに設定し、後でviewWillAppear:メソッドの値を使用してフィールドを有効または無効にします。

4

あなたも、無効にユーザーとの対話は、あなたはまた異なる、2時間

-(void)viewDidAppear:(BOOL)animated 
{ 
    memoDetailViewController.memoTextView.editable = NO; 
} 

-(void)viewDidDisappear:(BOOL)animated 
{ 
    memoDetailViewController.memoTextView.editable = YES; 
} 
+1

そうですが、そうすることで、コンポーネントの外観が変更されます。私はこれを行うために使用されています。この方法では、一見するとフィールドが編集可能ではないことがわかっていますが、これは望ましい動作ではない可能性があります。 (例:キーボードをポップする代わりにフィールドを埋めるモーダル表示をポップしたい場合、フィールドが無効であるとユーザに知らせることは必ずしも良い考えではありません)。 – psycho

0

を可能にすることができます

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField 
{ 

} 
0

にあなたはこれを試してみてください、両方のビューコントローラでこれを使用して特定のUIエレメントのXIBに

関連する問題