在顶部显示navigationController

时间:2012-12-08 12:18:40

标签: iphone ios uinavigationcontroller subview

我在我的应用程序中设置了一个子视图“popup”,如果用户点击子视图弹出窗口上的按钮,我想显示一个navController。到目前为止我已经设置了按钮,但是如果我点击按钮,导航控制器会出现在我的弹出窗口下面!?我已经搜索了一些解决方案,但我没有找到任何解决方案。整个控制器实际显示在一个文件夹中,你可以在这里找到:https://github.com/jwilling/JWFolders所以viewDidLoad属于文件夹和rootview。 我试图将其作为弹出窗口的子视图,但这也不起作用。有谁知道如何对待它?我也设置了popmatic programmaticaly和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];
}

我的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];

}

图片:

打开文件夹的按钮: enter image description here

文件夹本身: enter image description here

弹出窗口: enter image description here

提前致谢。

2 个答案:

答案 0 :(得分:1)

从目前为止的讨论和调试代码,您希望在弹出窗口中使用导航控制器设置照片浏览器。

所以这是实现此功能的sample code,看看它。

我使用了相同的KGModal示例代码并根据要求进行了扩展。我使用Xib来获得带导航栏的视图。

要从应用中的任何位置关闭弹出窗口,您可以使用以下行,因为它是共享实例。

[[KGModal sharedInstance] hideAnimated:YES];

<强>更新

在folderView中显示照片浏览器的原因是,您正尝试在folderView中显示photoBrowser,因此它呈现在非常小的高度和高度的文件夹视图中。无法看到任何照片。

所以我的建议是,当用户点击弹出窗口查看photoBrowser时,你只需删除弹出窗口并从viewController类中显示photoBrowser,因为除了这个类之外,所有内容都是通过视图处理的。

我已按上述方式进行了更改。工作正常,对你提供的代码,下载代码here并查看它。

让我知道它是否满足您的需求。

由于

答案 1 :(得分:0)

我注意到这行代码:

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

我只能认为,因为它是一个单例,它在UIApplication的关键窗口上添加了contentView。如果是这种情况,则模态视图控制器将始终位于弹出窗口下方。您可以通过向KGModal

添加新方法来解决此问题
- (void) showWithContentView: (UIView*)           contentView
            inViewController: (UIViewController*) controller
                 andAnimated: (BOOL)              animated;

该方法应该在指定控制器的视图中显示弹出窗口;你应该使用那种方法。

修改

经过多次挖掘后,我发现KGModal在另一个窗口显示弹出窗口。最快的解决方法是关闭弹出窗口,然后显示导航控制器。