11

私はUIPageViewControllerを覚えようとしていましたが、解決できなかった問題にヒットしました。 これは私が実行しようとしましたものです:UIPageViewControllerのTextViewsを持つViewController

  • ステップ:
    1. 私は単に2つのビューコントローラと ストーリーボードでのページビューコントローラを作成しました。
    2. 次に、File OwnerにPageViewController〜 のコードを追加して、dataSourcedelegateとして動作します。
    3. 私が走ったとき、物事はうまくいった。
    4. ボタンとテキストフィールドを2番目のビューコントローラに追加しました。
    5. 私はうまくいきました。
    6. 2番目のビューコントローラにテキストビューを追加して実行しました。テキスト・ビューの中に何かを書き込もうとしたとき、ページ・コントロールがジッタをつけて最初のビュー・コントローラに移動しました。

誰もが今までにこれを経験していますか?

@interface AMPageViewController : UIPageViewController <UIPageViewControllerDataSource, UIPageViewControllerDelegate> 

@end 

実装:

#import "AMPageViewController.h" 

@interface AMPageViewController() 
{ 
    UIViewController *mainController; 
    UIViewController* socController; 
} 
@end 

@implementation AMPageViewController 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" 
                  bundle: nil]; 

    mainController = (UIViewController*)[mainStoryboard instantiateViewControllerWithIdentifier: @"First"]; 
    socController = (UIViewController*)[mainStoryboard instantiateViewControllerWithIdentifier: @"Second"]; 
    [self setViewControllers:@[mainController] 
        direction:UIPageViewControllerNavigationDirectionForward 
        animated:NO 
        completion:nil]; 
    self.dataSource = self; 
    self.delegate = self; 
    // Do any additional setup after loading the view. 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

-(UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController 
{ 
    if (viewController == socController) 
     return mainController; 
    else return nil; 
} 

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController 
{ 
    if (viewController == mainController) 
     return socController; 
    else return nil; 
} 

- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController 
{ 
    return 2; 
} 

- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController 
{ 
    return 0; 
} 


@end 

If you want to download and try the project

+0

ページビューコントローラの遅延で私のiPhone 4ビーターに取り組んでいますあなたはどちらかスワイプまたは1つのエッジ付近でタップすることで、ページをめくることができます。私はあなたが左のタップジェスチャー認識装置に当たっていると推測しています。 – rdelmar

+0

私はそうは思わない。添付のプロジェクトをご覧くださいhttps://dl.dropbox.com/u/62559842/PageViewcontrollerTest.zip – Bavan

+0

ええ、あなたが意味するものを参照してください。それはスクロール遷移を使用することと関係がある。カールするように変更すると、正常に動作します。 – rdelmar

答えて

7

のためのファーストレスポンダに見て、私は多くのことを検討してきませんでしたこの問題について。 UIPageViewControllerの内部(プライベート)UIScrollViewに関連するバグのようです。 StackOverflowで検索すると、この問題の解決策はありません。

UITextView(UIScrollViewとAFAIRは内部UIWebViewを持っています)が奇妙なメッセージを送信しているようですsuperviewsチェーンでは、UIPageViewControllerのプライベートUIScrollViewを左上隅にスクロールします。

私はこの方法を使ってメッセージをブロックしようとしましたが、これはおそらくAppStoreでは大丈夫です。だから私は他のことを試みた。

最後の解決策は非常に簡単です: UITextViewをUIScrollViewの中に埋め込むだけです!

This is a link to your project updated

その場合、あなたは問題を解決します!

試してみて、私は

EDITをお知らせ:

どのように私は、このソリューションに到着しました:

直感。

多くのデバッグとスタックトレースが原因で、問題が "入れ子になったUIScrollView"システムのバグと関連していて、内側のビューからスーパービューに送信されたメッセージがあると思いました。

UITextViewはUIScrollViewを継承し、別のUIScrollViewであるUIWebDocumentView(プライベート)の内部にあります。デバッグ中に、上のUIScrollViewに送られた "再レイアウトスーパービュー"のような多くのメッセージ(プライベートメソッド)が見えました。そのため、何らかの理由で、内部スクロールビュー(UIWebDocumentView?)がスーパービューにメッセージ/イベントを送信していました。このメッセージ/イベント(おそらくバグのため)は、外部のUITextViewを停止しておらず、UIPageViewControllerによって処理されたUIScrollViewに転送されました。

単純なUIViewにUITextViewを埋め込むだけでは十分ではありません。UIViewは、処理できない場合にスーパービューにメッセージを転送するため、十分ではありません。 私は思った:UIScrollView おそらく(それ以外の場合は、UIScrollViewsをネストするのは簡単ではないだろう)、私は試してみました。

私は検査をやめたので、これはすべて想定しています。私は今週より詳細な見方をします。

+0

はい。できます。 :)ありがとう。とにかく、私はあなたがこの解決策を見つけるために導いた可能性のあるものについて何の手がかりも持っていません。再度、感謝します。 – Bavan

+0

私はいくつかの詳細を追加しました:-) – LombaX

0

以前に設定し、ビュー・コントローラ後もsocController

1

ビルドターゲットiOS-7.0。

スクロールビューのトリックは機能しませんでした。ストーリーボードとコードを使ってスクロールビューにテキストビューを埋め込もうとしましたが、運はありません。

単にtextviewへの呼び出しを延期しました。それほどエレガントではありませんが、私がこれまでに働いたのは唯一のことです。

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
     [self.textView becomeFirstResponder]; 
    }); 
} 

私のiPhone 5と私の超低速iPhone4で動作します。どんな実装の詳細でも、テキストビューが応答者になることが可能になるのは、設定された時間よりも長くかかる可能性があります。だから、これは絶対に防弾ではないことに注意してください。

--EDIT--

うーん...それは0.0000000000000001

関連する問題