我只是尝试使用UITextField
作为我的iMessage应用程序。
问题在于当它处于紧凑模式(MSMessagesAppPresentationStyleCompact
)时,一旦选择了文本字段,所有视图都会消失。它似乎在扩展模式下工作正常。
在紧凑模式下使用文本字段的正确方法是什么?感谢
答案 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
}