首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重用先前设置为inputAccessoryView的inputAccessoryView似乎不起作用

重用先前设置为inputAccessoryView的inputAccessoryView似乎不起作用
EN

Stack Overflow用户
提问于 2017-04-15 15:42:17
回答 1查看 466关注 0票数 0

我的ViewController包含

  1. 一个UITextView和
  2. 一个名为bar的简单UIView变量。

在textViewShouldBeginEditing()中,我从ViewController的视图中删除条形图,并将其设置为textView的inputAccessoryView:

代码语言:javascript
复制
bar.removeFromSuperview()
textView.inputAccessoryView = bar
textView.reloadInputViews()

这如预期的那样起作用。稍后,当我调用endEditing时,我从TextView的inputAccessoryView中移除条形条,并将其放回ViewController的视图中,如下所示:

代码语言:javascript
复制
textView.inputAccessoryView = nil
textView.reloadInputViews()
bar.frame = CGRect(x:0,y:500,width:100,height:50)
view.addSubview(bar)

但是在ViewController的视图中没有显示bar。下面是未显示在屏幕上的进程结束时栏的转储:

代码语言:javascript
复制
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

我哪里出问题了?

下面是我的视图控制器的代码:

代码语言:javascript
复制
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
    }

}
EN

回答 1

Stack Overflow用户

发布于 2017-04-15 16:52:29

通过将inputAccessoryView设置为零,您正在释放视图,当您试图重用它时,它就不再存在了。尝试将其添加为子视图,然后将inputAccessoryView设置为零。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43428001

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档