0

数年後、私は XCode を使って iOS 用の小さなアプリを作成しようと試みました。

私の MainViewController には、viewdidload に次の行が含まれています。

UIStoryboard* overviewStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *overviewController = [overviewStoryboard instantiateViewControllerWithIdentifier:@"Overview"];

UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:overviewController];

...

[self addChildViewController:nav];
[self.view addSubview:nav.view];
[nav didMoveToParentViewController:self];

概要の背後にあるコントローラーには、ビュー内のジェスチャ認識全体が含まれています。

プロパティ

@property (nonatomic, strong) UISwipeGestureRecognizer *swipeGestureUpDown;

viewdidload:

self.tableView.dataSource = self;
self.tableView.delegate = self;

// gesture recognizer top
self.swipeGestureUpDown = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipedScreen)];
self.swipeGestureUpDown.numberOfTouchesRequired = 1;
self.swipeGestureUpDown.direction = (UISwipeGestureRecognizerDirectionUp | UISwipeGestureRecognizerDirectionDown);

[self.view addGestureRecognizer:self.swipeGestureUpDown];

および swipedScreen のみの nslog:

- (void)swipedScreen:(UISwipeGestureRecognizer*)gesture
{
    NSLog(@"somewhere");
}

概要コントローラには、カスタム セルを含む tableView が含まれています。メインコントローラーは、このオーバービューコントローラーをルートコントローラーとしてナビゲーションに渡します。これは、スワイプアップの場合はslideUp、スワイプダウンの場合はslideInになります。上記で見たように、maincontroller は rootcontroller で navigationcontroller を呼び出しています。

何も起こらず、ジェスチャが認識されず、試行によってはこのメッセージでクラッシュします

unrecognized selector sent to instance

誰かが今何をすべきですか?

4

1 に答える 1

0

質問への回答はコメントにありました。ここに集約するだけです。いくつかの問題がありました。
初め:

self.swipeGestureUpDown = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipedScreen)];

@selector(swipedScreen)がありません:swipedScreen関数の定義が2 番目であるため、末尾で認識できなくなります- (void)swipedScreen:(UISwipeGestureRecognizer*)gesture

:

self.swipeGestureUpDown.direction = (UISwipeGestureRecognizerDirectionUp | UISwipeGestureRecognizerDirectionDown);

2 方向のスワイプに 1 つのジェスチャ認識機能を使用しても機能しません。詳しくはこちらをご覧ください。方向ごとに専用のジェスチャ レコグナイザーが必要です。

三番:

最も重要なのはUITableView、スクロールが有効になっている限り機能しない上方向と下方向のスワイプを追加しようとしUITableViewたことです。これは、これらのスワイプを処理するための独自のデフォルト アクションがあり、手動で処理できないためです。
ただし、テーブルのコンテンツが非常に限られており、スクロールする必要がない場合は、ジェスチャーの使用を停止し、ジェスチャーをレスポンダー チェーンの上位に転送するscrollEnabledようにfalse設定 できます。ここの説明UITableViewを参照してください。(から継承します。)scrollEnabledUITableViewUIScrollView

于 2013-06-19T01:12:00.230 に答える