Делегат протокола из пользовательской кнопки пользовательского интерфейса имеет нежелательный эффектIOS

Программируем под IOS
Ответить
Anonymous
 Делегат протокола из пользовательской кнопки пользовательского интерфейса имеет нежелательный эффект

Сообщение Anonymous »

Я пытался создать протокол и делегировать между пользовательской кнопкой пользовательского интерфейса и контроллером родительско-дочернего представления. Вкратце, у меня есть родительский контроллер представления, дочерний контроллер представления и пользовательская кнопка пользовательского интерфейса. Кнопка пользовательского интерфейса и дочерний виртуальный виртуальный компьютер находятся в родительском виртуальном канале. Я создал делегат протокола для пользовательской кнопки пользовательского интерфейса.
Я хочу изменить начало кадра просмотра дочернего виртуального канала, нажав кнопку пользовательского интерфейса. Я также хочу изменить изображение пользовательской кнопки пользовательского интерфейса при нажатии кнопки. Однако, когда я пытаюсь изменить изображение пользовательской кнопки пользовательского интерфейса, а также вызвать метод делегата, дочернее представление VC сначала обновляет положение кадра представления дочернего VC, как в методе представления обновления. Но позже он сбрасывает положение кадра в исходное положение. Вот пример кода:
Родительский контроллер представления
class ParentViewController: UIViewController {

let childVC: ChildViewController = {
let childVC = ChildViewController()
childVC.view.translatesAutoresizingMaskIntoConstraints = false
return childVC
}()

let customButton: CustomUIButton = {
let button = CustomUIButton(frame: .zero)
button.translatesAutoresizingMaskIntoConstraints = false
return button
}()

override func viewDidLoad() {
super.viewDidLoad()

// setup code for childVC and custom UI button
customButton.delegate = self
}
}

extension ParentViewController: CustomUIButtonDelegate {
func customUIButtonDidTap() {

self.childVC.updateView()

}
}

Контроллер дочернего представления
class ChildViewController: UIViewController {

var isHidden: Bool = false

override func viewDidLoad() {
super.viewDidLoad()
}

func updateView() {
if isHidden {
UIView.animate(withDuration: 0.3) {
self.view.frame.origin.y -= 40
self.isHidden = false
}
} else {
UIView.animate(withDuration: 0.3) {
self.view.frame.origin.y += 40
self.isHidden = true
}
}

}

}

Пользовательская кнопка пользовательского интерфейса
protocol CustomUIButtonDelegate: AnyObject {
func customUIButtonDidTap()
}

class CustomUIButton: UIButton {

weak var delegate: CustomUIButtonDelegate?

var isDoing: Bool = false

let image1: UIImage = {
let image = UIImage(systemName: "chevron.right") ?? UIImage()
return image
}()

let image2: UIImage = {
let image = UIImage(systemName: "chevron.left") ?? UIImage()
return image
}()

override init(frame: CGRect) {
super.init(frame: frame)

addTarget(self, action: #selector(didButtonTapped), for: .touchUpInside)
}

@objc func didButtonTapped() {

self.isDoing = !isDoing
self.setImage(isDoing ? image1 : image2 , for: .normal)

delegate?.customUIButtonDidTap()

}

}

Если я не изменю изображение пользовательской кнопки пользовательского интерфейса в методе делегата, оно будет работать без сброса положения кадра в его первое положение. Я не уверен, почему установка изображения кнопки имеет такой эффект.
Цель пользовательской кнопки пользовательского интерфейса без обновления изображения пользовательской кнопки
@objc func didButtonTapped() {

// self.isDoing = !isDoing
// self.setImage(isDoing ? image1 : image2 , for: .normal)

delegate?.customUIButtonDidTap()

}


Подробнее здесь: https://stackoverflow.com/questions/785 ... ted-effect
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»