私のViewControllerが以前inputAccessoryViewとしたのUIViewの再利用、doesntのは
- UITextViewと
- バーと呼ばれる簡単なUIViewの変数が含まれて働くように見えます。 textViewShouldBeginEditingで
()私はのViewControllerのビューからバーを削除し、TextViewののinputAccessoryViewとして設定:予想通り
bar.removeFromSuperview()
textView.inputAccessoryView = bar
textView.reloadInputViews()
これは動作します。その後 私はTextViewののinputAccessoryViewからバーを削除して、このように、バックのViewControllerのビューにそれをピットendEditing呼び出す:
textView.inputAccessoryView = nil
textView.reloadInputViews()
bar.frame = CGRect(x:0,y:500,width:100,height:50)
view.addSubview(bar)
しかしバーはのViewControllerのビューに戻って表示されません。私が間違っているつもりです
bar.window: Optional(<UIWindow: 0x7faa79608d50; frame = (0 0; 320 568); autoresize = W+H; gestureRecognizers = <NSArray: 0x600000048fa0>; layer = <UIWindowLayer: 0x600000036f20>>)
bar.superview: Optional(<UIView: 0x7faa794141c0; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x60800023a800>>)
dump(bar):
▿ Optional(<UIView: 0x7faa7940faf0; frame = (0 500; 100 50); layer = <CALayer: 0x608000037940>>)
- some: <UIView: 0x7faa7940faf0; frame = (0 500; 100 50); layer = <CALayer: 0x608000037940>> #0
- super: UIResponder
- super: NSObject
:ここでは、画面に表示されないプロセスの最後にバーのダンプがありますか?ここ
が私のViewControllerのコードです:
class ViewController: UIViewController, UITextViewDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
bar = UIView()
bar.frame = CGRect(x:0,y:500,width:100,height:50)
bar.backgroundColor = UIColor.red
//setToolBar()
textView.delegate = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBOutlet weak var textView: UITextView!
var bar: UIView!
func setToolBar() {
bar.frame = CGRect(x:0,y:500,width:100,height:50)
view.addSubview(bar)
textView.inputAccessoryView = nil
textView.reloadInputViews()
print("-----------------------\n");
print("cust.window: ", bar.window)
print("cust.superview: ", bar.superview)
print("dump: ")
dump(bar)
print("\n-----------------------\n")
}
func dismissKeyboard() {
self.view.endEditing(true)
print("ABOUT TO SET TOOLBAR ")
setToolBar()
print("JUST SET TOOLBAR ")
}
func textViewShouldBeginEditing(_ textView: UITextView) -> Bool {
bar.removeFromSuperview()
print("here")
dump(bar)
textView.inputAccessoryView = bar
textView.reloadInputViews()
return true
}
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
if(text == "\n") {
print("FRAME:", bar.frame)
//textView.inputAccessoryView = nil
//textView.inputView = nil
//textView.reloadInputViews()
dismissKeyboard()
return false
}
return true
}
}
これ以上ios 11では何も起こっていないようです。ありがとう! – aunindo