1

我在我的应用程序中设置了一个子视图“弹出窗口”,如果用户点击子视图弹出窗口上的按钮,我想显示一个 navController。到目前为止,我已经设置了按钮,但是如果我点击按钮,navigationController 会出现在我的弹出窗口下!?我已经搜索了一些解决方案,但我没有找到任何解决方案。整个控制器实际上显示在一个文件夹中,您可以在这里找到:https ://github.com/jwilling/JWFolders所以 viewDidLoad 属于文件夹和 rootview。我试图将其作为弹出窗口的子视图,但这也不起作用。有谁知道如何治疗?我也以编程方式设置了弹出窗口和导航控制器。提前致谢。

我的代码:

导航控制器设置:

    - (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];
}

我的 viewDidLoad

- (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];

更新:

在文件夹视图中显示照片浏览器的原因是,您试图在文件夹视图中显示照片浏览器,因此它在高度非常小的文件夹视图中显示并且看不到任何照片。

所以我的建议是,当用户点击弹出窗口查看 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在另一个窗口上显示了弹出窗口。最快的解决方法是关闭弹出窗口,然后显示导航控制器。

于 2012-12-08T18:48:39.180 回答