如何在Swift iOS应用程序中激活PHFComposeBarView控件?
作为iOS开发的相对障碍,我正在努力使我的Swift iOS应用程序中的控件变得活跃 在和中斜视Obj-C后,我已尽力将基本设置转换为Swift,以便控件显示在主视图中: 但是,我还没有成功地使控件以编程方式激活 我已经在Swift 2.0/XCode 7.0 Beta 2中创建了一个ViewController,其外观如下: ViewController.swift:如何在Swift iOS应用程序中激活PHFComposeBarView控件?,ios,swift,Ios,Swift,作为iOS开发的相对障碍,我正在努力使我的Swift iOS应用程序中的控件变得活跃 在和中斜视Obj-C后,我已尽力将基本设置转换为Swift,以便控件显示在主视图中: 但是,我还没有成功地使控件以编程方式激活 我已经在Swift 2.0/XCode 7.0 Beta 2中创建了一个ViewController,其外观如下: ViewController.swift: import UIKit import PHFComposeBarView class ViewController: U
import UIKit
import PHFComposeBarView
class ViewController: UIViewController, PHFComposeBarViewDelegate {
var composeBar: PHFComposeBarView {
let viewBounds = self.view.bounds
let frame = CGRectMake(0.0, viewBounds.size.height - PHFComposeBarViewInitialHeight, viewBounds.size.width, PHFComposeBarViewInitialHeight)
let composeBarView = PHFComposeBarView(frame: frame)
composeBarView.delegate = self
return composeBarView
}
override var inputAccessoryView: UIView {
return self.composeBar
}
override func canBecomeFirstResponder() -> Bool {
return true
}
override func viewDidAppear(animated: Bool) {
print("viewDidAppear self \(self)")
print("composeBar.delegate \(self.composeBar.delegate)")
print("composeBar.textView.delegate \(self.composeBar.textView.delegate)")
print("composeBar.canBecomeFirstResponder() \(self.composeBar.canBecomeFirstResponder())")
print("composeBar.textView.canBecomeFirstResponder() \(self.composeBar.textView.canBecomeFirstResponder())")
let res = self.composeBar.becomeFirstResponder()
print("composeBar.becomeFirstResponder() \(res)")
print("composeBar.isFirstResponder() \(self.composeBar.isFirstResponder())")
print("composeBar.textView.isFirstResponder() \(self.composeBar.textView.isFirstResponder())")
}
}
import UIKit
import PHFComposeBarView
class ViewController: UIViewController, PHFComposeBarViewDelegate {
@IBOutlet weak var composeBarView: PHFComposeBarView!
override func viewDidLoad() {
super.viewDidLoad()
composeBarView.delegate = self
}
override func canBecomeFirstResponder() -> Bool {
return true
}
override var inputAccessoryView: UIView {
composeBarView.removeFromSuperview()
return composeBarView
}
}
控制台:
viewDidAppear self <SwiftPHFComposeBarTest.ViewController: 0x7fe088619d90>
composeBar.delegate Optional(<SwiftPHFComposeBarTest.ViewController: 0x7fe088619d90>)
composeBar.textView.delegate Optional(<PHFDelegateChain: 0x7fe088654850>)
composeBar.canBecomeFirstResponder() true
composeBar.textView.canBecomeFirstResponder() true
composeBar.becomeFirstResponder() false
composeBar.isFirstResponder() false
composeBar.textView.isFirstResponder() false
viewdidisf
composeBar.delegate可选()
composeBar.textView.delegate可选()
composeBar.canBecomeFirstResponder()true
composeBar.textView.canBecomeFirstResponder()true
composeBar.becomeFirstResponder()错误
composeBar.isFirstResponder()false
composeBar.textView.isFirstResponder()false
怎么可能composeBar.canBecomeFirstResponder()
返回true
但composeBar.becomeFirstResponder()
返回false
另外,我不确定代理是否是可选的
编辑:已更新以包含调试输出。嗯,一种解决方案似乎是: ViewController.swift:
import UIKit
import PHFComposeBarView
class ViewController: UIViewController, PHFComposeBarViewDelegate {
var composeBar: PHFComposeBarView {
let viewBounds = self.view.bounds
let frame = CGRectMake(0.0, viewBounds.size.height - PHFComposeBarViewInitialHeight, viewBounds.size.width, PHFComposeBarViewInitialHeight)
let composeBarView = PHFComposeBarView(frame: frame)
composeBarView.delegate = self
return composeBarView
}
override var inputAccessoryView: UIView {
return self.composeBar
}
override func canBecomeFirstResponder() -> Bool {
return true
}
override func viewDidAppear(animated: Bool) {
print("viewDidAppear self \(self)")
print("composeBar.delegate \(self.composeBar.delegate)")
print("composeBar.textView.delegate \(self.composeBar.textView.delegate)")
print("composeBar.canBecomeFirstResponder() \(self.composeBar.canBecomeFirstResponder())")
print("composeBar.textView.canBecomeFirstResponder() \(self.composeBar.textView.canBecomeFirstResponder())")
let res = self.composeBar.becomeFirstResponder()
print("composeBar.becomeFirstResponder() \(res)")
print("composeBar.isFirstResponder() \(self.composeBar.isFirstResponder())")
print("composeBar.textView.isFirstResponder() \(self.composeBar.textView.isFirstResponder())")
}
}
import UIKit
import PHFComposeBarView
class ViewController: UIViewController, PHFComposeBarViewDelegate {
@IBOutlet weak var composeBarView: PHFComposeBarView!
override func viewDidLoad() {
super.viewDidLoad()
composeBarView.delegate = self
}
override func canBecomeFirstResponder() -> Bool {
return true
}
override var inputAccessoryView: UIView {
composeBarView.removeFromSuperview()
return composeBarView
}
}
快速搜索“input accessoryview becomefirstresponder”返回:谢谢Philipe。遗憾的是,添加了一个
self.view.window!。makeKeyAndVisible()
到我的ViewDidDisplay()方法的末尾没有区别。不过,我注意到,在iOS 9 beta版和iOS 8.3版中,我的行为有所不同,点击控件确实会像8.3版中所预期的那样显示键盘,但在尝试键入字符时,会出现EXC_BAD_ACCESS
异常。我会看看是否可以缩小到iOS版本的问题。嗯,似乎不是这样,PHFComposeBarView示例应用程序在8.3和9.0测试版中运行良好。抱歉,不确定它可能是什么。试着使用一个简单的文本视图,看看它是否有效,然后从那里排除故障。祝你好运注意:Post更新为包含调试输出。打开textview后,您是否在textview内检查了轻敲2次。。??它会消失的。。