Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Swift iOS应用程序中激活PHFComposeBarView控件?_Ios_Swift - Fatal编程技术网

如何在Swift iOS应用程序中激活PHFComposeBarView控件?

如何在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

作为iOS开发的相对障碍,我正在努力使我的Swift iOS应用程序中的控件变得活跃

在和中斜视Obj-C后,我已尽力将基本设置转换为Swift,以便控件显示在主视图中:

但是,我还没有成功地使控件以编程方式激活

我已经在Swift 2.0/XCode 7.0 Beta 2中创建了一个ViewController,其外观如下:

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
    }

}
控制台:

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次。。??它会消失的。。