为了账号安全,请及时绑定邮箱和手机立即绑定

在不使用私有API的情况下获取当前的第一个响应程序

在不使用私有API的情况下获取当前的第一个响应程序

MMMHUHU 2019-06-24 15:14:05
在不使用私有API的情况下获取当前的第一个响应程序一个多星期前,我提交了我的应用程序,今天收到了令人恐惧的拒绝邮件。它告诉我,我的应用程序不能被接受,因为我使用的是一个非公共的API;具体来说,它说,应用程序中包含的非公共API是FirstResponder。现在,违规的API调用实际上是我在这里找到的解决方案,所以:UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];UIView   *firstResponder = [keyWindow performSelector: @selector(firstResponder)];如何在屏幕上获得当前的第一个响应程序?我正在寻找一种不会让我的应用程序被拒绝的方法。
查看完整描述

3 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

在我的一个应用程序中,如果用户点击背景,我经常希望第一个响应者辞职。为此,我在UIView上编写了一个类别,我在UIWindow上调用它。

以下是基于这一点,并应返回第一个响应者。

@implementation UIView (FindFirstResponder)- (id)findFirstResponder{
    if (self.isFirstResponder) {
        return self;        
    }
    for (UIView *subView in self.subviews) {
        id responder = [subView findFirstResponder];
        if (responder) return responder;
    }
    return nil;}@end

iOS 7+

- (id)findFirstResponder{
    if (self.isFirstResponder) {
        return self;
    }
    for (UIView *subView in self.view.subviews) {
        if ([subView isFirstResponder]) {
            return subView;
        }
    }
    return nil;}

斯威夫特

extension UIView {
    var firstResponder: UIView? {
        guard !isFirstResponder else { return self }

        for subview in subviews {
            if let firstResponder = subview.firstResponder {
                return firstResponder            }
        }

        return nil    }}

SWIFT中的用法示例:

if let firstResponder = view.window?.firstResponder {
    // do something with `firstResponder`}


查看完整回答
反对 回复 2019-06-24
?
慕斯王

TA贡献1864条经验 获得超2个赞

如果你的最终目标只是辞职第一反应者,这应该是可行的:[self.view endEditing:YES]


查看完整回答
反对 回复 2019-06-24
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

操纵第一个应答者的一个常见方法是使用无目标动作。这是一种向响应者链发送任意消息的方法(从第一个响应者开始),然后沿着该链继续下去,直到有人响应该消息(已经实现了匹配选择器的方法)。

对于取消键盘的情况,无论哪个窗口或视图是第一个响应程序,这都是最有效的工作方式:

[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];

这应该比甚至更有效[self.view.window endEditing:YES].

(多亏了大扎弗提醒我这个概念)


查看完整回答
反对 回复 2019-06-24
  • 3 回答
  • 0 关注
  • 675 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信