2016-06-05 4 views
0

Я следую этому post для реализации UIPopoverBackgroundView. Я проверил класс UIPopoverBackgroundView, я думаю, что я реализовал все необходимые функции и переменные, но ошибка все еще сохраняется при запуске.Ошибка: [UIPopoverBackgroundView setArrowOffset:] должен быть реализован подклассами

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UIPopoverBackgroundView setArrowOffset:] must be implemented by subclassers.'

import UIKit 

class CustomPopoverBackground: UIPopoverBackgroundView { 

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

    override var arrowOffset: CGFloat { 
     get { 
      return 0.0 
     } 
     set { 
      super.arrowOffset = newValue 
     } 

    } 

    override var arrowDirection: UIPopoverArrowDirection { 
     get { 
      return UIPopoverArrowDirection.Up 
     } 
     set { 
      super.arrowDirection = newValue 
     } 
    } 

    override class func contentViewInsets() -> UIEdgeInsets { 
     return UIEdgeInsetsMake(10, 10, 10, 10) 
    } 

    override class func arrowBase() -> CGFloat { 
     return 2.0 
    } 

    override class func arrowHeight() -> CGFloat { 
     return 2.0 
    } 

} 

Где я неправ? Что такое setArrowOffset, я не нашел его в классе UIPopoverBackgroundView или UIPopoverBackgroundViewMethods протокола.

+0

Вы не можете использовать 'super.arrowOffset = newValue' в своем устройстве set arrow arrow. Этот суперпользователь выбрасывает это исключение. – dan

+0

@dan Не могли бы вы дать ответ, чтобы показать, что я должен делать вместо этого? – luiyezheng

ответ

0

Другой блог post, что на самом деле показывает реализацию пользовательских UIPopOverBackgroundView

Он держит стрелку в структуры

private struct Arrow { 
    let height : CGFloat = 30.0 
    let base  : CGFloat = 20.0 

    var direction : Direction = .UP 
    var offset : CGFloat = 0.0 
} 

override var arrowOffset: CGFloat { 
    get { 
     return arrow.offset 
    } 

    set { 
     arrow.offset = newValue 
    } 
} 

Нет супер вызов здесь, класс ожидает подкласс фактически содержать значение, а не использовать реализация суперкласса.

Смежные вопросы