iMessage App - 以紧凑的演示风格使用UITextField

时间:2016-10-02 01:13:03

标签: ios uitextfield uikit

我只是尝试使用UITextField作为我的iMessage应用程序。

问题在于当它处于紧凑模式(MSMessagesAppPresentationStyleCompact)时,一旦选择了文本字段,所有视图都会消失。它似乎在扩展模式下工作正常。

在紧凑模式下使用文本字段的正确方法是什么?感谢

3 个答案:

答案 0 :(得分:4)

您似乎只能在展开模式下使用文本字段,因此您需要实现以下内容:

-(BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
    if([self presentationStyle] == MSMessagesAppPresentationStyleCompact) {
        [self requestPresentationStyle:MSMessagesAppPresentationStyleExpanded];
        self.didRequestKeyboard = YES;
        return NO;
    }

    return YES;
}

-(void)didTransitionToPresentationStyle:(MSMessagesAppPresentationStyle)presentationStyle {
    // Called after the extension transitions to a new presentation style.

    // Use this method to finalize any behaviors associated with the change in presentation style.
    if(presentationStyle == MSMessagesAppPresentationStyleExpanded){
        if(self.didRequestKeyboard){
            [self.textField becomeFirstResponder];
            self.didRequestKeyboard = NO;
        }
    }
}

答案 1 :(得分:1)

我很难解决这个问题(从iOS 10.2开始仍然存在)并以此解决方法结束:

fileprivate class TextField: UITextField {
    override var canBecomeFirstResponder: Bool {
        if let viewController = viewController as? MSMessagesAppViewController,
           viewController.presentationStyle == .compact {
            viewController.requestPresentationStyle(.expanded)
            return false
        }
        return super.canBecomeFirstResponder
    }
}

我说“解决方法”因为我觉得这是一个问题,Apple应该解决这个问题,这个解决方案应该是暂时的。作为原始答案的替代,这种实现是隔离的,可以很容易地被删除。

答案 2 :(得分:0)

相同的解决方案,但使用块

func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
    if presentationStyle != .expanded {
        didTransitionHandler = {
            textField.becomeFirstResponder()
            self.didTransitionHandler = nil
        }

        requestPresentationStyle(.expanded)

        return false
    }

    return true
}