UINavigation 控制器 UIViewController 和 UItoolbar 作为子视图问题

Posted

技术标签:

【中文标题】UINavigation 控制器 UIViewController 和 UItoolbar 作为子视图问题【英文标题】:UINavigation controller UIViewController and UItoolbar as a subview issue 【发布时间】:2011-08-26 17:57:05 【问题描述】:

大家好,我正试图离开增强现实并转到我的导航控制器的下一个视图控制器

代码来自 ARKit 演示,我刚刚以编程方式添加了一个 UIToolbar 作为具有操作按钮的子视图。我希望​​这个按钮指向我现有导航控制器的下一个视图控制器。动作 takePicture: 被执行,因为我有一个 NSLog 消息但没有添加新的视图控制器

这是 ARGeoViewController.h 的代码

#import <Foundation/Foundation.h>

#import "ARViewController.h"
#import "AfterARViewController.h"


@interface ARGeoViewController : ARViewController 
CLLocation *centerLocation;
AfterARViewController *afterARViewController;



@property (nonatomic, retain) CLLocation *centerLocation;
- (IBAction)takePicture:(id)sender;
@property (nonatomic, retain) AfterARViewController *afterARViewController;

@end

这是 ARGeoViewController.m 的代码

#import "ARGeoViewController.h"

#import "ARGeoCoordinate.h"
#import "ARViewController.h"

@implementation ARGeoViewController

@synthesize centerLocation;

@synthesize afterARViewController;


- (void)setCenterLocation:(CLLocation *)newLocation 
[centerLocation release];
centerLocation = [newLocation retain];

for (ARGeoCoordinate *geoLocation in self.coordinates) 
    if ([geoLocation isKindOfClass:[ARGeoCoordinate class]]) 
        [geoLocation calibrateUsingOrigin:centerLocation];

        if (geoLocation.radialDistance > self.maximumScaleDistance) 
            self.maximumScaleDistance = geoLocation.radialDistance;
        
    


 
   -(void)viewWillAppear:(BOOL)animated

UIToolbar *toolbar = [UIToolbar new];
toolbar.barStyle = UIBarStyleBlackTranslucent;


// create a bordered style button with custom title
UIBarButtonItem *playItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCamera
                                                                           target:self
                                                                           action:@selector(takePicture:)] autorelease];


NSArray *items = [NSArray arrayWithObjects: 
                  playItem,
                  nil];
toolbar.items = items;

// size up the toolbar and set its frame
// please not that it will work only for views without Navigation toolbars. 
[toolbar sizeToFit];
CGFloat toolbarHeight = [toolbar frame].size.height;
CGRect mainViewBounds = self.view.bounds;
[toolbar setFrame:CGRectMake(CGRectGetMinX(mainViewBounds),
                             CGRectGetMinY(mainViewBounds) + CGRectGetHeight(mainViewBounds) - (toolbarHeight),
                             CGRectGetWidth(mainViewBounds),
                             toolbarHeight)];

[self.view addSubview:toolbar];




 - (IBAction)takePicture:(id)sender
 
NSLog(@"takepicture");
if(self.afterARViewController == nil)

    AfterARViewController *afterARController = [[AfterARViewController alloc]
                                                    initWithNibName:@"AfterARViewController" bundle:[NSBundle mainBundle]];
    self.afterARViewController = afterARController;
    [afterARController release];
    [cameraController release];




[self.navigationController pushViewController:self.afterARViewController  animated:YES];

    


  @end

非常感谢

【问题讨论】:

【参考方案1】:

我对 ARKit 没有经验,但是 cameraController 是导航控制器堆栈的一部分吗?当你这样做时释放它,你可能会把事情扔掉。作为测试,尝试注释掉释放 cameraController 的代码行,看看它是否会影响这一点。

另外,FWIW 我希望您用来设置工具栏的代码位于 viewDidLoad 中,而不是 viewDidAppear 中。

【讨论】:

以上是关于UINavigation 控制器 UIViewController 和 UItoolbar 作为子视图问题的主要内容,如果未能解决你的问题,请参考以下文章

来自 ViewController 的 UINavigation 控制器

UINavigation 控制器:以编程方式呈现和关闭

UINavigation 控制器和委托[关闭]

UINavigation的外观设置和页面之间的跳转

UINavigation 控制器上的完成按钮没有导航回来

UINavigation 将同一视图控制器推送两次错误