Невозможно отобразить цвет границы и фон в виде размытия в пользовательском представлении как всплывающее представление в Swift - PullRequest
0 голосов
/ 25 мая 2018

У меня есть требование показывать всплывающее окно в качестве некоторых параметров настройки.

Итак, я выбрал пользовательское представление как UIView с файлом Xib.

class CustomAlertView : UIView {
@IBOutlet weak var customAlertView : UIView!
@IBOutlet weak var button1 : UIButton!
@IBOutlet weak var button2 : UIButton!

override init(frame: CGRect) { // for using CustomView in code
    super.init(frame: frame)
    self.commonInit()
}

required init?(coder aDecoder: NSCoder) { // for using CustomView in IB
    super.init(coder: aDecoder)
    self.commonInit()
}

private func commonInit() {
    Bundle.main.loadNibNamed("CustomAlertView", owner: self)
    guard let content = customAlertView else { return }
    content.frame = self.bounds
    content.autoresizingMask = [.flexibleHeight, .flexibleWidth]
    self.addSubview(content)
}

}

Ис заданными выходными соединениями.

И я могу загрузить представление в классе viewcontroller.

Но проблема в том, что он не отображается как всплывающее представление и не отображает цвет рамки, и т. д.даже я тоже добавил.

И текущий self.view (основной вид из viewcontroller), все еще перемещающий его, имеет вид таблицы, в то время как я нажимаю на кнопки в пользовательском представлении, ничего не происходит.

   func someAction() {
        self.view.addSubview(customAlert)
        self.customAlert.layer.cornerRadius = 13
        self.customAlert.layer.borderWidth = 10
        self.customAlert.layer.borderColor = UIColor.gray.cgColor
        self.customAlert.clipsToBounds = false
        let radius: CGFloat = self.customAlert.frame.width / 2.0 //change it to .height if you need spread for height

        let shadowPath = UIBezierPath(rect: CGRect(x: 0, y: 0, width: 2.1 * radius, height: self.customAlert.frame.height))

        self.customAlert.layer.masksToBounds = false
        self.customAlert.layer.cornerRadius = 8; // if you like rounded corners
        self.customAlert.layer.shadowOffset = CGSize(width:-15, height:20);
        self.customAlert.layer.shadowRadius = 5;
        self.customAlert.layer.shadowOpacity = 0.5;
        self.customAlert.layer.shadowPath = shadowPath.cgPath

        self.customAlert.byMonthlyBtn.addTarget(self, action: #selector(button1tapped), for: .touchUpInside)
        self.customAlert.byAnnuallyBtn.addTarget(self, action: #selector(button2tapped), for: .touchUpInside)
}

И выглядит как на скриншоте ниже

enter image description here

Есть предложения?

1 Ответ

0 голосов
/ 26 мая 2018
private func commonInit() {
    Bundle.main.loadNibNamed("CustomAlertView", owner: self)
    guard let content = customAlertView else { return }
    content.frame = self.bounds
    content.autoresizingMask = [.flexibleHeight, .flexibleWidth]
    self.addSubview(content)
}

Ваша проблема в том, что вы используете CustomAlertView , который вы загрузили.Попробуйте настроить свой код, как показано ниже.

private func commonInit() {
    guard let view = Bundle.main.loadNibNamed("CustomAlertView", owner: self)?.first as? CustomAlertView else {   
        return
    }
    view.frame = bounds
    view.autoresizingMask = [.flexibleHeight, .flexibleWidth]
    addSubview(view)
}
...