1

アプリケーションでサブビュー「ポップアップ」を設定しました。ユーザーがサブビュー ポップアップのボタンをタップした場合に navController を表示したいと考えています。ここまでボタンを設定したのですが、ボタンをタップすると、ポップアップの下にナビゲーションコントローラーが表示される!? 私はいくつかの解決策を探しましたが、何も見つかりませんでした。コントローラー全体は、実際にはここにあるフォルダーに表示されます: https://github.com/jwilling/JWFoldersしたがって、viewDidLoad はフォルダーとルートビューに属します。ポップアップのサブビューとして作成しようとしましたが、それも機能しません。誰かがそれを治療する方法を知っていますか? プログラムでポップアップを設定し、navigationController も設定しました。前もって感謝します。

私のコード:

navController のセットアップ:

    - (IBAction)dothis:(id)sender {

    MWPhotoBrowser *browser = [[MWPhotoBrowser alloc] initWithDelegate:self];

    // Set browser options.
    browser.wantsFullScreenLayout = YES;
    browser.displayActionButton = YES;


    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:browser];

    [self presentModalViewController:navController animated:YES];

    NSMutableArray *photos = [[NSMutableArray alloc] init];
    MWPhoto *photo;
    photo = [MWPhoto photoWithFilePath:[[NSBundle mainBundle] pathForResource:@"star" ofType:@"png"]];
    photo.caption = @"The star is soo beateful...";
    [photos addObject:photo];

    self.photos = photos;

}


- (MWPhoto *)photoBrowser:(MWPhotoBrowser *)photoBrowser photoAtIndex:(NSUInteger)index {
    if (index < _photos.count)
        return [_photos objectAtIndex:index];
    return nil;
}
- (NSUInteger)numberOfPhotosInPhotoBrowser:(MWPhotoBrowser *)photoBrowser {
    return _photos.count;
}

ポップアップコード:

   -(IBAction)mehr:(id)sender {
    //the popup size and content
    UIView *contentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 280, 440)];
    CGRect welcomeLabelRect = contentView.bounds;
    welcomeLabelRect.origin.y = 20;
    welcomeLabelRect.size.height = 40;
    UILabel *welcomeLabel = [[UILabel alloc] initWithFrame:welcomeLabelRect];

//an simple activityindicator

 activityindi = [[UIActivityIndicatorView  alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
    activityindi.frame = CGRectMake(120, 200, 40, 40);
    [activityindi startAnimating];
    [contentView addSubview:activityindi];

   //The Imageview
    CGRect infoimagerect = CGRectMake(5, 70, 270, 200);

    UIImageView *infoimage = [[UIImageView alloc] initWithFrame:infoimagerect];

        //and the Button

cubut = [UIButton buttonWithType:UIButtonTypeCustom];
    [cubut addTarget:self
              action:@selector(dothis:)
    forControlEvents:UIControlEventTouchUpInside];
    [cubut setTitle:nil forState:UIControlStateNormal];
    cubut.frame = CGRectMake(5, 70, 270, 200);

//retrieving data from parse.com
PFQuery *query = [PFQuery queryWithClassName:@"My-Application"];
    [query getObjectInBackgroundWithId:@"My-ID"
                                 block:^(PFObject *textdu, NSError *error) {
                                     if (!error) {

//hide the Button if there is no image
                                         cubut.hidden=YES;

                                         //the headline of popup
                                         UIFont *welcomeLabelFont = [UIFont fontWithName:@"copperplate" size:20];

                                         welcomeLabel.text = [textdu objectForKey:@"header"];
                                         welcomeLabel.font = welcomeLabelFont;
                                         welcomeLabel.textColor = [UIColor whiteColor];
                                         welcomeLabel.textAlignment = NSTextAlignmentCenter;
                                         welcomeLabel.backgroundColor = [UIColor clearColor];
                                         welcomeLabel.shadowColor = [UIColor blackColor];
                                         welcomeLabel.shadowOffset = CGSizeMake(0, 1);
                                         welcomeLabel.lineBreakMode = UILineBreakModeWordWrap;
                                         welcomeLabel.numberOfLines = 2;
                                         [contentView addSubview:welcomeLabel];

//the image from parse

 if (!error) {
                                             PFFile *imageFile = [textdu objectForKey:@"image"];
                                             [imageFile getDataInBackgroundWithBlock:^(NSData *data, NSError *error) {
                                                 if (!error) {
                                                     UIImage *image = [UIImage imageWithData:data];
                                                     infoimage.image = image;
                                                     infoimage.contentMode = UIViewContentModeScaleAspectFit;
                                                     //show the button when the image appears
                                                     cubut.hidden = NO;




                                                     [contentView addSubview:infoimage];
                                                    //stop the activityindicator
                                                     [activityindi stopAnimating];

                                                 }
                                             }];
                                         }
 } else {
                                        //show some text 
                                         welcomeLabel.text = @"No connection!";
                                         [welcomeLabel sizeToFit];
//hide the button
                                         cubut.hidden = YES;

                                         [contentView addSubview:infoLabel];
//stop the activityindicator
                                         [activityindi stopAnimating];
                                     }

                                 }];
//add the content to the KNGModal view



 [[KGModal sharedInstance] showWithContentView:contentView andAnimated:YES];
}

私のビューDidLoad

- (void)viewDidLoad
{

but.hidden = YES;
PFQuery *query = [PFQuery queryWithClassName:@"myapp"];
    [query getObjectInBackgroundWithId:@"Rgq5vankdf"
                                 block:^(PFObject *textu, NSError *error) {
                                     if (!error) {
but.hidden = NO;
                                         but.color = [UIColor colorWithRed:0.90f green:0.90f blue:0.90f alpha:1.00f];

} else {

                                         //if failure
                                        but.hidden = YES;
                                        mol.text = @"No Connection";

                                     }

                                 }];


    [super viewDidLoad];

}

ピクチャー:

フォルダを開くボタン: ここに画像の説明を入力

フォルダー自体: ここに画像の説明を入力

ポップアップ: ここに画像の説明を入力

前もって感謝します。

4

2 に答える 2

1

これまでの議論とコードのデバッグから、ナビゲーションコントローラーを備えたポップアップにフォトブラウザーを表示する必要があります。

したがって、この機能を実装するサンプルコードを次に示します。これを見てください。

私は同じKGModalサンプルコードを使用し、要件に従って拡張しました。Xibを使用して、ナビゲーションバー付きのビューを表示しました。

共有インスタンスであるため、アプリ内の任意の場所からポップアップを閉じるには、以下の行を使用できます。

[[KGModal sharedInstance] hideAnimated:YES];

アップデート:

folderViewで写真ブラウザを表示する理由は、folderView内にphotoBrowserを表示しようとしているため、非常に低い高さのfolderView内に表示されていて、写真が表示されないためです。

したがって、ユーザーがポップアップをタップしてphotoBrowserを表示すると、ポップアップを削除してviewControllerクラスからphotoBrowserを表示するだけで、このクラス以外はすべてビューを介して処理されることをお勧めします。

私は上記のように変更を加え、正常に動作します。指定されたコードに、ここからコードをダウンロードして確認してください。

それがあなたのニーズを満たしているかどうか私に知らせてください。

ありがとう

于 2012-12-12T09:22:33.290 に答える
0

このコード行に気づきました:

[[KGModal sharedInstance] showWithContentView: contentView andAnimated: YES];

contentViewそして、それはシングルトンであるため、UIApplicationのキーウィンドウにを追加するとしか思えません。その場合、モーダルビューコントローラーは常にポップアップの下に表示されます。KGModalクラスに新しいメソッドを追加することでこれを解決できます

- (void) showWithContentView: (UIView*)           contentView
            inViewController: (UIViewController*) controller
                 andAnimated: (BOOL)              animated;

メソッドは、指定されたコントローラーのビューにポップアップを表示する必要があります。代わりにその方法を使用する必要があります。

編集

KGModalさらに掘り下げてみると、別のウィンドウにポップアップが表示されていることがわかりました。最も簡単な解決策は、ポップアップを閉じてから、navコントローラーを表示することです。

于 2012-12-08T18:48:39.180 に答える