相关疑难解决方法(0)

如何获取当前活动的UITextField/UITextView和resignFirstResponder?

是否可以在UIView中获取当前活动的UITextField或UITextView,这样我可以隐藏键盘[text resignFirstResponder];

iphone cocoa-touch uiview ios

13
推荐指数
3
解决办法
2万
查看次数

Swift:成为UITextField上的第一响应者?

我在Storyboard上创建了一个带有一个UITextField的自定义UIViewController.在viewDidLoad,我将UITextFIeld设置为becomeFirstResponder,没有任何反应(没有弹出键盘).

然后我试着打电话resignFirstResponder(),但它返回了假.接下来,我试图first responder通过使用@上的代码循环所有子视图来查找是谁.在不使用私有API的情况下获取当前的第一响应者.事实证明,没有一个子视图是第一个响应者.

我的ViewController在故事板中

在此输入图像描述

我的守则

class BLTestViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet var tf: UITextField

    override func viewDidLoad() {
        super.viewDidLoad()

        tf.delegate = self
        tf.becomeFirstResponder()
        // Do any additional setup after loading the view.
    }
}
Run Code Online (Sandbox Code Playgroud)

就这么简单......为什么不是键盘出现!!! 我有一件事是自动布局,但我不确定这是否会影响键盘弹出.

storyboard uitextfield becomefirstresponder ios swift

13
推荐指数
4
解决办法
4万
查看次数

按下"Tab"键时多次调用textFieldShouldBeginEditing

我有一个包含多个输入字段的表单屏幕,这些字段包含在UITableView中.如果用户连接蓝牙键盘,则可以按"Tab"键.问题是textFieldShouldBeginEditing方法为每个文本字段多次调用.这是正常行为吗?正常的行为是,如果某个字段处于焦点,并且用户按Tab键,则光标应跳转到其他文本字段,因此textFieldShouldBeginEditing只会被调用一次(对于此文本字段).

看起来这个问题没有解决(post1,post2).你们是否忽略了这个问题的存在,或者找到了解决方法?

objective-c ios

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

如何在Mac OS X上的NSTextField中启用拼写检查?

我有一个NSTextField,我想启用"as-you-type"拼写检查.当我加载我的应用程序时,我可以从菜单栏>编辑>拼写和语法>键入时检查拼写.

我希望默认情况下启用此选项.在IB中我可以为NSTextView启用它,但我想在这部分UI中使用NSTextField.

谢谢.

更新: 有没有人知道是否可以以编程方式运行菜单栏>编辑>拼写和语法>从Objective-C代码在NSTextField上键入选项时检查拼写?似乎NSTextField支持"在键入时检查拼写"选项,只是没有办法从Obj-C启用该选项.

编辑#1

我尝试以下手动启用菜单,但它不起作用:

// Focus TextField
[textField becomeFirstResponder];

// Enable Spell Checking
NSMenu *mainMenu = [[NSApplication sharedApplication] mainMenu];
NSMenu *editMenu = [[mainMenu itemWithTitle:@"Edit"] submenu];
NSMenu *spellingMenu = [[editMenu itemWithTitle:@"Spelling and Grammar"] submenu];
NSMenuItem *autoSpellingMenuItem = [spellingMenu itemWithTitle:@"Check Spelling While Typing"];
[autoSpellingMenuItem setEnabled:YES];

NSLog(@"Menu: %@", [autoSpellingMenuItem description]);
NSLog(@"Target: %@", [[autoSpellingMenuItem target] description]);

// Actually perform menu action
[[autoSpellingMenuItem target] performSelector:[autoSpellingMenuItem action]];
Run Code Online (Sandbox Code Playgroud)

是不是可以直接调用菜单项操作而不是使用setEnabled:YES?

以上输出如下,不确定目标为空的原因

App[3895:a0f] Menu: <NSMenuItem: 0x100135180 Check Spelling While Typing>
Current language:  auto; currently objective-c
App[3895:a0f] …
Run Code Online (Sandbox Code Playgroud)

macos cocoa spell-checking objective-c nstextfield

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

如何从Cocoa中的Window Controller获取当前的第一响应者?

我想在窗口中找到第一个响应者视图.为此,我想实现这样的类别:

    @implementation  NSView (ViewExtensions)
- (NSView *)findFirstResponder
{
    if ([self isFirstResponder]) {        
        return self;     
    }

    for (NSView *subView in [self subviews]) {
        NSView *firstResponder = [subView findFirstResponder];

        if (firstResponder != nil) {
            return firstResponder;
        }
    }

    return nil;
}

@end
Run Code Online (Sandbox Code Playgroud)

上面的代码基于SO上的这个问题/答案:在不使用私有API的情况下获取当前的第一响应者.

问题可能是,NSResponder没有像UIResponder那样的isFirstResponder方法.NSResponder的等价物是什么?

如果上面的方法是如上实现的,我当然得到调试消息:"'NSView'可能不响应'isFirstResponder'".

如何让findFirstResponder在Cocoa中工作?

更多信息:我后来想在我的窗口控制器中以某种方式使用上述方法:

        NSArray *copiedObjects;
        if ([[self window]contentView] == MyTableView) {
            copiedObjects = [tableController selectedObjects];
        }
        if ([[self window]contentView] == MyOutlineView) {
            copiedObjects = [treeController selectedFolders];
        }
Run Code Online (Sandbox Code Playgroud)

cocoa nsview categories first-responder

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

UITextField在视图出现后丢失firstResponder

我有一个UIPageViewController.一个页面只有一个按钮,另一个页面有UITextField一个按钮.当页面滚动到带有字段的视图时,我想要它becomeFirstResponder并打开键盘.这是发生的事情:

  • 我调用了[self.locationQuery becomeFirstResponder]ViewController的viewDidAppear方法.但它永远不会打开键盘.

  • 我做同样的事情viewWillAppear,它看似简短,但后来很快就被解雇了.

  • 如果我在带有文本字段的页面上,并将页面拉到中途并放开(不更改页面),则self.locationQuery获得焦点就好了.

似乎其他东西正在从字段中获取firstResponder状态,但我不知道什么是什么,以及为什么它只会在页面发生变化时发生(而不是在页面转向失败后显示).有任何想法吗?

更新

我创建了一种方法来抓取视图以查看是否有任何其他视图确实采用firstResponder(来自此问题的答案:在不使用私有API的情况下获取当前的第一响应者).结果:

  • 当我明确地将第一响应者提供给文本字段时,该方法报告它具有第一响应者状态.

  • 当我不这样做时,它会返回null.

现在我更加困惑.

objective-c first-responder uipageviewcontroller

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

通过NSNotification从UICollectionView中删除单元格

我有一个简单的基于UICollectionView的应用程序 - 一个UICollectionView和一个基于NSMutableArray的数据模型,为简单起见.

我可以通过didSelectItemAtIndexPath:delegate方法删除没有问题的单元格:

-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath{
    [self.data removeObjectAtIndex:[indexPath row]];
    [self.collectionView deleteItemsAtIndexPaths:@[indexPath]];
}
Run Code Online (Sandbox Code Playgroud)

但是,我正在尝试通过一个子类添加一个删除选项UIMenuController,该UICollectionViewCell子类通过一个UILongPressGestureRecognizer正常触发并且我成功触发一个NSNotification

-(void)delete:(id)sender{
      NSLog(@"Sending deleteme message");
      [[NSNotificationCenter defaultCenter] postNotificationName:@"DeleteMe!" object:self userInfo:nil];
}
Run Code Online (Sandbox Code Playgroud)

我在我的ViewController中捕获它并调用以下方法:

-(void)deleteCell:(NSNotification*)note{
       MyCollectionViewCell *cell = [note object];
       NSIndexPath *path = nil;
       if((path = [self.collectionView indexPathForCell:cell]) != nil){
           [self.data removeObjectAtIndex:[path row]];
           [self.collectionView deleteItemsAtIndexPaths:@[path]];
       }
}
Run Code Online (Sandbox Code Playgroud)

它在deleteItemsAtIndexPaths:call上崩溃了

-[UICollectionViewUpdateItem action]: unrecognized selector sent to instance 0xee7eb10
Run Code Online (Sandbox Code Playgroud)

我已经检查了所有明显的东西 - 比如来自NSNotification的对象和从indexPathForCell:call创建的indexPath,这一切看起来都很好.看起来我正在调用deleteItemsAtIndexPath:在两个地方使用相同的信息,但由于某种原因,它在通过通知路由时失败.

这是错误中给出的地址信息:

(lldb) po 0xee7eb10
(int) $1 = 250080016 <UICollectionViewUpdateItem: 0xee7eb10> index path …
Run Code Online (Sandbox Code Playgroud)

ios uicollectionview uicollectionviewcell

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

隐藏UIKeyboard

我试图在我的SplitView应用程序中隐藏键盘(因为它覆盖了部分根菜单).但是,我唯一能找到的是如何在使用文本字段后隐藏键盘[TextField resignFirstResponder].

还有其他隐藏键盘的方法吗?
理想情况下,我想使用显示菜单的barButtonItem作为隐藏键盘的触发器.

objective-c uikeyboard

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

从屏幕上删除键盘而不调用resignFirstResponder

NotifyView添加了一个自定义View(),UIWindow带有一个dismiss按钮(将其删除UIWindow).当有PUSH通知时,会添加此视图,didReceiveRemoteNotification 有几种情况我可以在任何屏幕上,而我的键盘是通过UITextfield/ 来UP UITextview.在此阶段,如果推送,NotifyView则会UIWindow在键盘后面添加.一旦收到PUSH,我想重新签名键盘,所以我可以:

  • 发布通知NSNotificaitonCenter以撤消所有textfields/textviews(如果有的话firstResponder).为此,我必须保持活动指针指向所有控制器中当前活动的textfield/textview.

  • 在AppDelegate中创建一个变量,并将活动的文本域/文本视图分配给它和PUSH,以及PUSH上resignFirstResponder的那些.

这两个解决方案都需要更改所有控制器的代码,我正在寻找更通用的东西,如:

  • 有什么方法我可以通过接收PUSH简单地从屏幕上删除键盘
  • 或者我可以获取应用程序的当前firstResponder并明确地重新签名.

这些可能是通用解决方案.

如果有人可以促进这个思考过程,或者有人对此案例有任何直接的解决方案,那将是非常有帮助的.

iphone objective-c ipad ios ios5

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

如何在键盘处于活动状态时显示UIAlertController操作表?

我从我的UIViewController呈现UIAlertController动作表:

UIAlertController sheet = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleActionSheet];
[self presentViewController:sheet animated:YES completion:nil];
Run Code Online (Sandbox Code Playgroud)

这在大多数情况下都可以正常工作.除非我有键盘,否则表格会出现在键盘后面.这是预期的行为吗?还有其他参数我需要指定或从其他地方呈现它吗?

ios8 uialertcontroller

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