在我的UISearchBar代码中发生了一些奇怪的事情,我无法弄清楚发生了什么.在我的应用程序中,我有一个视图控制器设置如下
查看控制器A --->查看控制器B.
在View Controller A上,我有一个包含"page curl"按钮的工具栏.轻触此按钮后,我执行带有页面卷曲过渡样式的模态segue,并显示View Controller B(这为用户提供了View Controller B位于View Controller A下方的效果,而实际上它们是两个截然不同的View Controllers) .在View Controller B上,我有一个名为"Find Near Address"的按钮.当用户点击"查找近地址"时,我正在寻找无缝连续发生的两个操作:
到目前为止,我已经能够成功执行展开segue但是当我试图在View Controller A上设置我的UISearchBar作为第一响应者时,键盘没有弹出!我完全迷失了,我不知道为什么会这样.
我采取的方法很简单.视图上的展开segue控制器B返回并进入View Controller A上的函数调用(IBAction)returnToMainView:(UIStoryboardSegue *)segue.
,在此函数中调用Now,我调用[self FindNearAddress]
以下是我的FindNearAddress函数:
- (void)FindNearAddress {
[self.theSearchBar becomeFirstResponder];
}
Run Code Online (Sandbox Code Playgroud)
我还实现了以下UISearchBarDelegate方法
- (void)searchBarTextDidBeginEditing:(UISearchBar *)theSearchBar {
[self.theSearchBar setShowsCancelButton:YES animated:YES];
self.theSearchBar.text = @"";
}
- (void)searchBarCancelButtonClicked:(UISearchBar *)theSearchBar {
self.theSearchBar.text=@"Please enter a custom address..";
[self.theSearchBar setShowsCancelButton:NO animated:YES];
[self.theSearchBar resignFirstResponder];
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助我/指出我做错了什么?我想指出我在视图控制器A上添加了一个调用我的"FindNearAddress"函数的测试按钮,这成功地使我的UISearchBar第一响应者并调出键盘.当我从View Controller B返回(展开)时,键盘只能弹出键盘,第一个响应器被设置但键盘没有弹出一些奇怪的原因.
目前,我按以下方式设置了导航堆栈:
ViewController A
- > ViewController B
- > ViewController C
- >ViewController D
在ViewController
C和的实现代码中ViewController D
,我有一个选择器,如果满足以下测试,它将只运行代码块
if (self.navigationController.visibleViewController)
Run Code Online (Sandbox Code Playgroud)
我面临的问题是上面的测试总是返回true ViewController C
.首先,我在IOS模拟器中启动我的应用程序,然后我一直向上导航到View Controller D.一旦ViewController D
加载,我按下模拟器上的"home"按钮.按下主页按钮后,我再次单击我的应用程序并重新启动我的应用程序(进入前台).现在发生的是奇怪的,我可见的视图控制器是ViewController D
,因为那是我最后一次的视图控制器.虽然ViewController D
现在是我目前唯一可见的视图控制器,但上面的if语句也返回true ViewController C
!(我只想要ViewController D's
执行选择器代码,这是一个问题).
所以这就引出了一个问题,它究竟是什么意思成为一个visibleViewController
如何才能使ViewController C's
选择器不执行,如果ViewController D
是在我之前出现的视图控制器..谢谢!
如何在我的应用程序的每个视图控制器上禁用自动旋转?我希望每个视图/屏幕只能在纵向模式下查看,如果手机旋转,我不希望我的视图控制器转换到横向模式.我该怎么做呢?我在网上看到了太多令人困惑的解释/教程.我在特定的视图控制器上尝试了以下代码,它没有帮助,视图仍然旋转
- (NSInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskPortrait;
}
- (BOOL) shouldAutorotate {
return YES;
}
Run Code Online (Sandbox Code Playgroud)