gpt4 book ai didi

ios - UIButton 正常工作,但不在 popoverPresentationController

转载 作者:行者123 更新时间:2023-11-28 08:19:45 28 4
gpt4 key购买 nike

我有一个 parent 容器 UIView,它具有三个 subview :1 个 UITextView 和 2 个按钮(按钮位于 UITextView 的顶部,但作为容器 UIView 的 subview 包含)。当我在屏幕上正常显示父 UIView 时,只是在 UIViewController 内部,按钮完美地触发了它们关联的操作方法并正常运行。但是,当我在成为弹出窗口的 View Controller 中显示 UIView 时, View 层次结构会正确显示,但按钮不会触发其关联的操作方法,并且没有任何反应。 UIPopoverPresentationController 和按钮有什么我不明白的地方吗?

将按钮添加到父 UIView

func layoutButtons(in parent: UIView) {
let speechButton = UIButton(type: .custom)
speechButton.frame = CGRect(x: parent.frame.width - 35, y: parent.frame.height - 35, width: 30, height: 30)
speechButton.setImage(UIImage(named: "sound_icon"), for: .normal)
speechButton.addTarget(self, action: #selector(Textual.textToSpeech), for: UIControlEvents.touchUpInside)
parent.addSubview(speechButton)

let fontSizeButton = UIButton(type: .custom)
fontSizeButton.frame = CGRect(x: textView.frame.width - 75, y: textView.frame.height - 35, width: 30, height: 30)
fontSizeButton.setImage(UIImage(named: "font_size_icon"), for: .normal)
fontSizeButton.addTarget(self, action: #selector(Textual.toggleFontSize), for: UIControlEvents.touchUpInside)
parent.addSubview(fontSizeButton)

// wrap text around the bottom buttons
let excludeSpeechButton = UIBezierPath(rect: speechButton.frame)
let excludeFontSizeButton = UIBezierPath(rect: fontSizeButton.frame)
self.textView.textContainer.exclusionPaths = [excludeSpeechButton, excludeFontSizeButton]
}

@objc func textToSpeech() {
if synth.isPaused {
synth.continueSpeaking()
} else if synth.isSpeaking {
synth.pauseSpeaking(at: .immediate)
} else {
let speechUtterance = AVSpeechUtterance(string: attributedText.string)
speechUtterance.rate = 0.5
synth.speak(speechUtterance)
}
}

@objc func toggleFontSize() {

if self.smallFontSizeMode == true {
self.smallFontSizeMode = false
} else {
self.smallFontSizeMode = true
}

// for each character, multiply the current font size by fontSizeModifier
// http://stackoverflow.com/questions/19386849/looping-through-nsattributedstring-attributes-to-increase-font-size

self.attributedText.beginEditing()

self.attributedText.enumerateAttribute(NSFontAttributeName, in: NSMakeRange(0, self.attributedText.length), options: NSAttributedString.EnumerationOptions.reverse, using: { (value, range, stop) in
if let oldFont = value as? UIFont {
var newFont: UIFont?
if self.smallFontSizeMode == true { // was big and now toggling to small
newFont = oldFont.withSize(oldFont.pointSize / 2)
} else { // was small and now toggling to big
newFont = oldFont.withSize(oldFont.pointSize * 2)
}
attributedText.removeAttribute(NSFontAttributeName, range: range)
attributedText.addAttribute(NSFontAttributeName, value: newFont!, range: range)
}
})

self.attributedText.endEditing()

self.textView.attributedText = self.attributedText

}

呈现 UIViewController

func present(viewController: UIViewController, at location: CGRect) {

viewController.modalPresentationStyle = .popover
parentViewController.present(viewController, animated: true, completion: nil)

let popController = viewController.popoverPresentationController
popController?.permittedArrowDirections = .any
popController?.sourceView = parentView
popController?.sourceRect = location

}

更新 - 我添加了 popController?.delegate = viewController 作为 func present(viewController:at:) 的最后一行,我在下面添加了 扩展 UIViewController: UIPopoverPresentationControllerDelegate { }

最佳答案

要回答你的问题,你需要告诉你的呈现 View Controller 委托(delegate)谁,所以在下面添加这个并让我知道它是否有效:

popController?.delegate = viewController

关于ios - UIButton 正常工作,但不在 popoverPresentationController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41640503/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com