我添加了UIImagePickerController一个UIViewController.我也指定了UIImagePickerControllerDelegate那个UIViewController.
当我执行以下行时,
myPicker.delegate = self;
Run Code Online (Sandbox Code Playgroud)
Xcode通过以下消息告诉我:
警告:从不兼容的类型'RootViewController'分配id
然后我将UINavigationControllerDelegate协议添加到同一个UIViewController并且错误消息消失了.
所以,我必须双方协议添加到UIViewController时候我加入UIImagePickerController?
如果它UIImagePickerController是UINavigationController文档中所述的子类,那么这不应该是自动的吗?为什么我必须添加其父代理协议而不仅仅是UIImagePickerControllerDelegate协议?
这是一个错误还是我错过了什么?
iphone inheritance delegates uiimagepickercontroller uinavigationcontroller
在iOS中,是否可以在默认后退按钮旁边添加一个按钮(使用该方法时自动创建的按钮pushViewController)

我试图使用的方法setLeftBarButtonItems和setBackBarButtonItem却徒劳无功-每当我设置左边栏按钮项目,默认返回按钮消失.
谢谢你的帮助!
我有一个导航控制器,它的根视图控制器是类型CollectionViewControllerA.在选择一个项目后,我有一个淡出和扩展动画,然后调用将第二个类型的视图控制器CollectionVewControllerB推入堆栈:
CollectionViewControllerB *b = ... // construction of the view controller to be pushed
[UIView animateWithDuration:.3
animations:^{
self.collectionView.transform = CGAffineTransformMakeScale(1.5, 1.5);
self.collectionView.alpha = 0;
}
completion:^(BOOL s){
[self.navigationController pushViewController:b animated:NO];
}];
Run Code Online (Sandbox Code Playgroud)
我以类似的方式弹出视图控制器
[UIView animateWithDuration:.3
animations:^{
self.collectionView.transform = CGAffineTransformMakeScale(.3, .3);
self.collectionView.alpha = 0;
}
completion:^(BOOL s){
[self.navigationController popViewControllerAnimated:NO];
}];
Run Code Online (Sandbox Code Playgroud)
这里的问题是弹出视图控制器时应用程序崩溃.原因:
*** -[CollectionViewControllerB scrollViewDidScroll:]: message sent to deallocated instance
Run Code Online (Sandbox Code Playgroud)
我知道问题是因为弹出的视图控制器被破坏了,但为什么scrollViewDidScroll:首先调用它?没有改变contentOffset的collectionView代码,并没有用户交互无论是.除非更改transform属性也会触发调用方法?
CollectionViewControllerB实现,scrollViewDidScroll:因为我需要禁用垂直滚动.
同时我有一个非常凌乱的黑客来防止崩溃,那是在动画之前,我补充说
self.collectionView.delegate = nil;
Run Code Online (Sandbox Code Playgroud)
这会阻止方法被调用.但必须有更好的方法.
任何人都可以阐明为什么 …
crash uiscrollview uinavigationcontroller ios uicollectionview
在Apple最近发布的Remote应用程序中,我注意到导航栏的行为方式是独特的,我无法重现它.当弹出正在播放视图控制器时,导航栏对于正在播放视图控制器保持透明,并且库视图控制器的导航栏也保持半透明(屏幕截图1).我想弄清楚他们是使用两个导航控制器还是只使用一个.我个人觉得他们只使用一个有两个原因(1)启用了交互式弹出手势; (2)当您按下库视图控制器中的"正在播放"按钮时,就在现在播放屏幕完成"推视控制器"动画之前,导航栏变为透明(屏幕截图2).这是我按下视图控制器时所遇到的行为(将导航栏设置为透明).所以我的问题是:Apple如何呈现两个视图控制器的两个视图控制器的导航栏,就像它们是个体一样(如屏幕截图1),甚至条形按钮,导航标题等...切换时的不透明度为100%(通常在当按下新控制器时,按下/弹出前一个视图控制器的按钮和标题会逐渐消失.我试着玩弄了吧色调颜色viewDidAppear,并viewWillAppear在这两个视图控制器,但无法重现相同的行为,并不能防止褪色栏按钮.
天哪我希望我已经很好地解释了这一点,我只是想着它而感到困惑!
截图1(弹出):

截图2(推送):

我UINavigationController有一系列的UIViewControllers关于它.在某些情况下,我想要回弹两个级别.我以为我可以popViewControllerAnimated连续两次调用它,但事实证明,第二次调用它时,它不会弹出任何东西而是返回NULL.我是否需要存储对目标VC的引用并调用popToViewControllerAnimated?我可以这样做,但它使我的代码变得复杂,因为UIViewController当我将VC推入堆栈时我必须传递*.
这是相关的片段:
UIViewController* one = [self.navigationController popViewControllerAnimated:YES];
if (...) {
// pop twice if we were doing XYZ
UIViewController *two = [self.navigationController popViewControllerAnimated:YES];
// stored in "one" and "two" for debugging, "two" is always 0 here.
}
Run Code Online (Sandbox Code Playgroud)
我在做一些奇怪的事吗?我想写一些惯用的代码,所以如果"正确"的方式是打电话popToViewControllerAnimated,或者完全不同的话,我会乐意改变它.
在iPhone上,我使用导航控制器来推送和弹出视图.非常便利.
在Android中是否有同等效力?
我可以更改我的UINavigationController的字体吗?- > 标题
所以我在iOS 7应用程序中构建了一个导航控制器.titleView是可见的,以及它自己的后退按钮和导航栏.出于某种原因,交互式弹出手势(从左边缘轻扫)不起作用.什么都没发生.当我记录手势时,它不是零.为了启用此功能,我有什么特别的事吗?什么可能导致它不起作用?
我遇到了一个问题,我的导航控制器在启动然后取消新的iOS 7后滑动手势后变得无法使用.
一些相关信息:
主页取消隐藏viewWillDisappear中的导航栏
-(void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// Let's hide the navbar when we show the home view
[self.navigationController setNavigationBarHidden:YES];
…
}
-(void) viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
// Let's hide the navbar when we show the home view
[self.navigationController setNavigationBarHidden:NO];
}
Run Code Online (Sandbox Code Playgroud)当用户点击主页上的活动图标时,活动的视图控制器被推送到堆栈上.
如果用户开始在iOS中使用新的后滑动手势,但随后停止手势(即决定不返回),一切看起来都不错.但是,如果用户导致另一个视图控制器被推到导航堆栈上,那么唠叨条就会变得无法使用,并且用户无法从当前视图控制器导航回来.
笔记
我正在重建一个没有故事板的应用程序,而我遇到的最麻烦的部分是以编程方式导航视图.很少有东西写在那里没有使用故事板,所以找到答案是很困难的.
我的问题非常简单.我有我ViewController和我的SecondViewController想要从前者推到后者.
在AppDelegate:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
window = UIWindow(frame: UIScreen.mainScreen().bounds)
window?.backgroundColor = UIColor.whiteColor()
window?.rootViewController = ViewController()
window?.makeKeyAndVisible()
return true
}
Run Code Online (Sandbox Code Playgroud)
然后在ViewController.swift:
class ViewController: UIViewController, AVAudioPlayerDelegate, UITextFieldDelegate {
override func viewDidLoad() {
super.viewDidLoad()
startFinishButton.setTitle("Begin", forState: .Normal)
startFinishButton.addTarget(self, action: "moveToSecondViewController", forControlEvents: .TouchUpInside)
view.addSubview <*> startFinishButton
}
func moveToSecondViewController(sender: UIButton) {
let vc = SecondViewController()
println(self.navigationController) // returns nil
self.navigationController?.pushViewController(vc, …Run Code Online (Sandbox Code Playgroud) ios ×7
ios7 ×2
iphone ×2
objective-c ×2
android ×1
appdelegate ×1
crash ×1
delegates ×1
fonts ×1
gesture ×1
inheritance ×1
swift ×1
title ×1
uiscrollview ×1