小编Abh*_*ram的帖子

UISearchBar成为第一个没有显示键盘的响应者

在我的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(撤消页面卷曲过渡并将视图控制器A卷曲回View Controller B)
  • 其次,一旦视图控制器B消失并且视图控制器A再次成为主视图,我希望视图控制器A上的UISearchBar成为第一个响应者,这意味着闪烁的光标应该出现在搜索栏中,键盘应该弹出.

到目前为止,我已经能够成功执行展开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返回(展开)时,键盘只能弹出键盘,第一个响应器被设置但键盘没有弹出一些奇怪的原因.

objective-c first-responder ios segue

5
推荐指数
0
解决办法
2665
查看次数

为什么self.navigationController.visibleViewController在不可见的视图控制器上返回true

目前,我按以下方式设置了导航堆栈:

ViewController A- > ViewController B- > ViewController C- >ViewController D

ViewControllerC和的实现代码中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是在我之前出现的视图控制器..谢谢!

iphone objective-c uinavigationcontroller ios

1
推荐指数
1
解决办法
3126
查看次数

防止我的应用程序IOS 6的每个视图控制器上的自动旋转

如何在我的应用程序的每个视图控制器上禁用自动旋转?我希望每个视图/屏幕只能在纵向模式下查看,如果手机旋转,我不希望我的视图控制器转换到横向模式.我该怎么做呢?我在网上看到了太多令人困惑的解释/教程.我在特定的视图控制器上尝试了以下代码,它没有帮助,视图仍然旋转

- (NSInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

- (BOOL) shouldAutorotate {
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

cocoa-touch uiinterfaceorientation ios auto-rotation ios6

0
推荐指数
1
解决办法
176
查看次数