• ベストアンサー

iPhoneアプリの開発についてです。

tableviewからwebviewへのセグエによるシーンチェンジで問題が生じます。 tableviewにはuiswipeを実装しているのですがシーンチェンジした後のwebviewでもtableviewのswipeが適用されています。(tableviewでは右スワイプでメニューが出る機能を実装しているのですが、シーンチェンジ後のビューでもそのクラスにコードを記述していないにも関わらずメニューが出てきてしまいます。) 強引な方法で解決可能だと思うのですが、より簡潔なコードで解決できる方法があれば教えてくださると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

uiswipeというのはUISwipeGestureRecognizerのことでしょうか? 実際のコーディング等あまり詳しく示されてないので どこに問題があるのかよくわかりませんが、 GestureRecognizerは、addGestureRecognizerで追加した 対象viewに対してのみ働くものであり、別のviewに影響しません。 単純に考えればwebviewに対してもUISwipeGestureRecognizerを 設定してしまったんじゃないかということになりますが、 そんなことをした覚えがないなら別のviewがwebviewにかぶさって それが反応しているのかもしれません。 スワイプを検出してメニューを出す処理にブレークポイントを 設定し、webviewをスワイプした時に動作を中断させ、その時点の 呼び出し履歴(スタックフレーム)等を確認すれば、なぜスワイプ 動作が呼び出されたのかわかるのではないかと思います。 また、ViewControllerのどこかにブレークポイントを設定して 動作を中断し、そこでデバッガのコマンドで > po [self.view recursiveDescription] といれれば、そのViewController内の全体view構造および 各viewに追加されているGestureRecognizerが見えるので それを調べると何が意図通りでないのかわかると思います。 (参考) http://rochefort.hatenablog.com/entry/2013/11/16/032109

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • iPhoneアプリの開発についてです。

    今RSSリーダーのようなiPhoneアプリを開発中です。 TableViewのセルをタップすることで目的の記事をUIWebViewに表示させるといったNavigationControllerを使ったシンプルなものですが、直前に表示した記事を左スワイプすることでスクロール位置などそのままの状態でもう一度表示させるといった機能を実装したいと考えています。 例えると、Safariでスワイプして戻ったり進んだりする感じです。 WebViewからTableViewに戻ると、当然WebViewを表示していたインスタンスは破棄されますのでその直前にインスタンスをコピーすればいいのではなど色々試行錯誤してはいますが行き詰っています。 コピーできたとしてもそれを復元するといった形で再び再描画する方法もわかりませんし、そもそもインスタンス、つまりはViewをコピーするといったやり方にもピンときません。 どうすればいいでしょうか?わかる方がいればぜひ教えてほしいです。

  • iPhoneアプリの開発についてです。

    右スワイプで左からフロントビューの上にかぶさるようにテーブルビューが出てくる機能を実装したいと思っています。 フロントビューとサイドビュー、どちらも一つのコントローラーに乗せてしまえば簡単なのですがサイドビューは別のコントローラー、つまり別のクラスで管理したうえで実装したい。 サイドビューを管理するクラスをインスタンス化し、 SideViewController *side = [[SideViewController alloc] init]; side.tableView ~ という風に呼び出してコーディングしてもうまくいきません。 アドバイスいただけると幸いです。

  • iphoneアプリ開発についての質問です

    http://okwave.jp/qa/q8846564.htmlの質問に補足を付け加えたものです。 storyboardのprototype cellsでカスタムセルを4つ作成しidentifierも設定した状態で、 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static const id identifiers = { @"MetaCell", @"StatusCell", @"EvoCell", @"FormCell" }; NSString *CellIdentifier = identifiers[indexPath.section]; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 以下略 という風にしているのですが UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath: というエラーが出てしまいます。 identifierの文字列は何度見ても一致していました。 if (cell == nil) cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 上記のコードを追加しても、一応エラーは出ませんが当然セルは反映せず真っ白のままです。 if (cell == nil) { if (indexPath.section == 0) { cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"]; } else if (indexPath.section == 1) { cell = [tableView dequeueReusableCellWithIdentifier:@"StatusCell"]; } else if (indexPath.section == 2) { cell = [tableView dequeueReusableCellWithIdentifier:@"EvoCell"]; } else if (indexPath.section == 3) { cell = [tableView dequeueReusableCellWithIdentifier:@"FormCell"]; } } 一応このようなやりかたでも試しましたが結果は同じでした。 ちなみにこのテーブルビューへは前のビューからsegueで (void)[[segue destinationViewController] initDetailDic:dic]; で遷移してきています。 何度調べても原因がわからず困っています。心当たりはないでしょうか。 *補足 問題の起こっているこのテーブルビューへは、前のテーブルビューから遷移してきているのですが試しにNavigationControllerのrootViewに設定してみたところちゃんと表示されました。画面遷移の方法に原因があると考えられるのですが、上に書いたやり方はごくごく一般の方法だとおもうのですが・・・

  • iPhoneアプリの開発についてです。

    iPhoneアプリにディレクトリ階層を管理し、テーブルビューに表示する機能を実装中です。 パスの後ろに、"/○○○(ディレクトリ名)"という文字列を足して指定のディレクトリのパスを取得し中のファイルやフォルダの一覧を取得するという手法を用いています。 次のディレクトリに進む分には問題ないのですが、元のフォルダに戻るときに問題が生じてしまいます。 セルをタップすることで元のパスの後ろに選択したフォルダの名前を足していますが、ナビゲーションコントローラーで戻る際にパスの後ろに足されたフォルダ名を取り除かなくてはなりません。 もちろん戻るボタンが押されたことを検知するコードを調べたのですが、 -(void) viewWillDisappear:(BOOL)animated { if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound) { //ここでパスから文字列を取り除く } [super viewWillDisappear:animated]; } これではルートフォルダ→次のフォルダの間でしか検知されません。僕がやりたいのはルートフォルダ→次のフォルダ→次のフォルダ→・・・とすべてのフォルダ間の戻るボタンの検知をしたいのです。 didSelectRowAtIndexPathメソッドに UITableViewController *nextDir = [[UITableViewController alloc] init]; nextDir.tableView.delegate = self; nextDir.tableVIew.dataSourse = self; と記述することで、ストーリーボードにいくつもコントローラーを置かずにテーブルビューにディレクトリの内容を表示しています。 自前のコントローラー→nextDir間の戻るボタン検知は先ほど乗せたコードで検知できましたが、nextDir→nextDir間の戻るボタン検知はどうすればいいでしょうか? 簡単ですが説明図を作ってみました。わかりにくかったらすみません。

  • スワイプ画面でのonclick処理について

    先日、以下のサイトを参考にスワイプ画面を作成しましたが スワイプ画面でボタンをクリックする処理が実装できませんでした。 http://web-dou.com/android/swipe.html ページをA⇔B⇔Cとスワイプで遷移することができ、 Aの画面でAのレイアウトに配置したボタンを押すと ある処理を行うというものです。 以下のコードを3つの上記のスワイプを管理するソースコードに記述したところ、 「NullPointerException」というエラーが発生しました。 m_button = (Button)findViewById(R.id.button01); m_button.setOnClickListener(this); 以前した質問(http://okwave.jp/qa/q8826506.html)で回答していただいた通り、 参考にさせていただいた方法ではOnclick処理は実装できないのでしょうか? もし実装できないのであればスワイプ画面でOnclick処理を行う方法について 教えていただければと思います。 回答よろしくお願いします。

  • iPhoneアプリ 画面遷移での変数受け渡し

    現在、iPhoneアプリの開発を勉強している者です。 少し詰まってしまった箇所があるので、ご教授いただけると幸いです。 TableViewController間での変数の受け渡しを実装しており、1枚目のTableViewでタップされたセルのテキストを2枚目に渡す、というコードを書きました。 受け渡しに関するコードは以下の部分です。 -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [self performSegueWithIdentifier:@"mySegue" sender:self]; } -(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([[segue identifier] isEqualToString:@"mySegue"]) { SecondTableViewController *viewCon = segue.destinationViewController; NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath]; viewCon.myValue = cell.textLabel.text; } } これ自体は問題なく動いてくれたのですが、SecondTableViewControllerにNavigationControllerをEmbed Inしたところ、1枚目でセルをタップした際にエラーが出てアプリが止まってしまうようになりました。 BreakPointを設けてみると上記コードのviewCon.myValue = cell.textLabel.text;のところで止まっており、unrecognized selector sent to instanceというエラーが吐き出されていました。 同様のエラーが出た例などを調べてみたのですが自力では解決できず・・・、どなたか原因を指摘して頂けるとありがたいです。 よろしくお願いします。

  • xcodeでのiOS開発で、コードで画面遷移する時

    xcodeでのiOS開発で、コードで画面遷移する方法について質問です。 テーブルビューで、セルをタップすると呼び出されるメソッドで コードで画面遷移をさせようとしています。 しかし、画面遷移をすると遷移先の画面が真っ黒になってしまいます。 どうすればなおりますか? - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { NextViewController *nvc = [[NextViewController alloc] init]; nvc.hidesBottomBarWhenPushed = YES; [self.navigationController pushViewController:nvc animated:YES]; } ちなみに、遷移先のクラスはインポートしてあります。 StoryBoardは使っていません。

  • iPhone用天気アプリ製作

    iPhone用の天気アプリを作りたいと考えております。インターネットで色々調べていると(http://d.hatena.ne.jp/keitanxkeitan/20110116/1295167422http://d.hatena.ne.jp/keitanxkeitan/20110116/1295167422)このサイトに行き着きました。サイト上部のiPhoneが2代並んでいる画像の様に地方の選択から都道府県の選択、更に地名の選択まで行いその選択した地名の天気を知るアプリを作ってみたいと考えております。 Table View Controllerで画面を推移させることはできるようになりましたが、このサイトには専門用語も多くその後がわからず今回質問させていただきました。 (1)サイト内のコードはどこにコピー&ペーストすればいいのでしょうか? (2)サイト内にある無料の天気予報APIであるWeather HacksのURLはコード内に記述しなくてもいいのでしょうか? (3)このコードを入力するだけでこのサイト内にあるアプリが実装するのでしょうか?(Table View Controllerにて土台となる推移する画面は作成しなくてもよい?) 以前にも同じような質問をさせていただきともて丁寧な回答もいただきましたが、初心者のためわからずまた同じような質問をさせていただく始末でございます。 どなたかご教授をよろしくお願いいたします。

  • cocoaアプリで悩んでます。

    cocoaアプリで悩んでます。 よろしくお願いします。 Mac初心者です。 現在、cocoaAPI、Xcode3.0、InterfaceBuilder3.0(以下IB)を使ってアプリケーションを作っています。 <アプリ概要> <1>実行時に現れるダイアログにhtmlファイルをドラッグ&ドロップで貼り付けて表示。 <2>そのファイルがあるフルパスを表示。 <現状> 上記内容は実装できたのですが、<1>から<2>に進むためには設置したボタンをクリックしなければいけないような仕様になっています。 これをドラッグ&ドロップした時点で<2>の状態に進むようにしたいのです。 できるだけIBを利用したいと思っています。 WebViewクラスにはDownloadDelegate等のデリゲートが準備されているので、これを使うべきなのかなと思っているのですが、IB上で設置したインスタンスからデリゲートをどのように設定するのか、設定されたデリゲートに対するメッセージをどのように活用するのか(メソッドの引数には受け取ったメッセージを記述すべき?、どう書けば良いのか?、等)よく理解できていません。 デリゲートでメッセージを受け取った側のクラスのメソッドはどのように書けば良いかサンプルコードを記述して頂けるのであればうれしい限りです。 どうぞよろしくお願いしいます。

  • VS C# 2010でクラスビュー不可

    VisualStudio C# 2010でクラスビューを開きたい。 MSDNの通り、コードエディタ開いて、[表示]メニューをポイントしたが、 "クラスビュー"が出てきません。どうしてでしょうか。