4

私はUIViewControllerを持っています。このコントローラーでは、プログラムで UITextView を作成し、そのデリゲートをコントローラーとして設定します。タップしたときに textView の編集を開始したくないので、これを行います。

ViewDidLoad メソッド

UITextView* textView = [[UITextView alloc] initWithFrame:CGRectMake(9, 10, 302, 200)];
[textView setDelegate:self];
[self.view addSubview:textView];
[textView release];

ここで NO を返す textViewShouldBeginEditing メソッドを実装して、キーボードが表示されないようにしました。

textViewShouldBeginEditing メソッド

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView
{
    NSLog(@"Shouldbegin");
    return NO;
}

現れる問題

textView をタップすると一度は機能しますが、もう一度タップすると、ログなしでアプリケーションがクラッシュします。textView を保持して離すと奇妙なことに、動作させたいように動作します。一方、通常の 1 回のタップは 2 回目は機能しません。

編集

連続してすばやくシングルタップすることもできるようで、x 秒後には機能しないようです。

いくつかのテストの後、iOS 5.X > バグのようであることがわかりました。4.3 デバイス/シミュレーターでアプリを実行すると、正常に動作します。iOS 5.1 デバイスのエラー ログには、次のように表示されます。

Date/Time:       2012-04-17 14:00:49.497 +0200
OS Version:      iPhone OS 5.1 (9B176)
Report Version:  104

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000014
Crashed Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   TextInput                       0x36bf69e8 TI::Favonius::BeamSearch::choose_hit_test_node(WTF::RefPtr<TI::Favonius::SearchNode> const&, WTF::RefPtr<TI::Favonius::KeyAreaNode> const&, WTF::RefPtr<TI::Favonius::SearchNode> const&, WTF::RefPtr<TI::Favonius::SearchNode> const&) + 12
1   TextInput                       0x36bf6d1e TI::Favonius::BeamSearch::update_for_touch(unsigned int, WTF::PassRefPtr<TI::Favonius::KeyAreaNode>) + 602
2   TextInput                       0x36bfb5c2 TI::Favonius::StrokeBuildManager::update_search_for_touch(unsigned int, int) + 66
3   TextInput                       0x36bfb97c TI::Favonius::StrokeBuildManager::key_down_or_drag_hit_test_for_UI(bool, CGPoint, double, int, int, float, bool, ZT::LayoutDictionaryContext&, bool, int) + 216
4   TextInput                       0x36bddf54 TIInputManagerZephyr::simulate_touches_for_input_string() + 344
5   TextInput                       0x36bed8ba -[TIKeyboardInputManagerZephyr candidates] + 214
6   UIKit                           0x31066616 -[UIKeyboardImpl generateAutocorrectionReplacements:] + 82
7   UIKit                           0x31108a96 __71-[UITextInteractionAssistant scheduleReplacementsForRange:withOptions:]_block_invoke_0 + 370
8   UIKit                           0x3110ec62 -[UITextSelectionView calculateAndShowReplacements:] + 6
9   Foundation                      0x3762192c __NSFireDelayedPerform + 408
10  CoreFoundation                  0x361a1a2c __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 8
11  CoreFoundation                  0x361a1692 __CFRunLoopDoTimer + 358
12  CoreFoundation                  0x361a0268 __CFRunLoopRun + 1200
13  CoreFoundation                  0x3612349e CFRunLoopRunSpecific + 294
14  CoreFoundation                  0x36123366 CFRunLoopRunInMode + 98
15  GraphicsServices                0x324e3432 GSEventRunModal + 130
16  UIKit                           0x30e70e76 UIApplicationMain + 1074
4

5 に答える 5

1

私は解決策を見つけました。私は Apple のバグを回避するのはあまり好きではありませんが、必要な場合もあります。三段です…

1) デフォルトのキーボードを非表示のビューに置き換える

- (void)viewDidLoad
{
    [super viewDidLoad];
    myTextView.inputView = customKeyboard;
}

2) YES と答えて編集を許可します

- (BOOL)textViewShouldBeginEditing:(UITextView *)textView{
    return YES;
}

3) textViewDidChangeSelection で、最初の応答者を辞任してカーソルを非表示にします

- (void)textViewDidChangeSelection:(UITextView *)textView{
    [textView resignFirstResponder];
}
于 2012-06-20T20:07:03.737 に答える
0

いくつかのテストの結果、iOS5.Xのバグのようであることがわかりました。4.3デバイス/シミュレーターでアプリを実行すると、正常に動作します。

ログファイルを編集したメインの投稿を見てください。

于 2012-04-25T12:45:45.080 に答える
0
-(BOOL)textViewShouldBeginEditing:(UITextView *)textView
{

   [txtView resignFirstResponder];

}

dealloc メソッドで txtView を解放します。

于 2012-04-17T11:25:27.880 に答える
0

タップしたときに UITextView の編集を開始したくない場合:

UITextView* textView = ...;
textView.editable = NO;
于 2012-04-17T11:12:11.303 に答える