2017-07-18 32 views
0

我收到此错误“'removeCircleLabel'由于此行代码中的'内部'保护级别而无法访问。我将CVCalendar库添加到我的项目中。我添加了pod,但是当我在项目中添加视图控制器代码时,它给了我这个错误。因“内部”保护级别不可访问3

@IBOutlet weak var calendarView: CVCalendarView! 

    @IBAction func removeCircleAndDot(sender: AnyObject) { 
    if let dayView = selectedDay { 
     calendarView.contentController.removeCircleLabel(dayView)// **error on this line** 

     if dayView.date.day < randomNumberOfDotMarkersForDay.count { 
      randomNumberOfDotMarkersForDay[dayView.date.day] = 0 
     } 

     calendarView.contentController.refreshPresentedMonth() 
    } 
} 

public typealias ContentViewController = CVCalendarContentViewController 

public final class CVCalendarView: UIView { 
// MARK: - Public properties 
public var manager: Manager! 
public var appearance: Appearance! 
public var touchController: TouchController! 
public var coordinator: Coordinator! 
public var animator: Animator! 
public var contentController: ContentViewController! 
public var calendarMode: CalendarMode! 

public var (weekViewSize, dayViewSize): (CGSize?, CGSize?) 
} 


// MARK: Delete circle views (in effect refreshing the dayView circle) 
extension CVCalendarContentViewController { 
    func removeCircleLabel(_ dayView: CVCalendarDayView) { 
    for each in dayView.subviews { 
     if each is UILabel { 
      continue 
     } else if each is CVAuxiliaryView { 
      continue 
     } else { 
      each.removeFromSuperview() 
     } 
    } 
    } 
} 

我的视图控制器代码

import UIKit 
import CVCalendar 


class MainPageViewController: UIViewController, UITableViewDelegate,  
UITableViewDataSource { 

struct Color { 
    static let selectedText = UIColor.white 
    static let text = UIColor.black 
    static let textDisabled = UIColor.gray 
    static let selectionBackground = UIColor(red: 0.2, green: 0.2, blue: 1.0, alpha: 1.0) 
    static let sundayText = UIColor(red: 1.0, green: 0.2, blue: 0.2, alpha: 1.0) 
    static let sundayTextDisabled = UIColor(red: 1.0, green: 0.6, blue: 0.6, alpha: 1.0) 
    static let sundaySelectionBackground = sundayText 
} 

// MARK: - Properties 
@IBOutlet weak var calendarView: CVCalendarView! 
@IBOutlet weak var menuView: CVCalendarMenuView! 
@IBOutlet weak var monthLabel: UILabel! 
@IBOutlet weak var daysOutSwitch: UISwitch! 

fileprivate var randomNumberOfDotMarkersForDay = [Int]() 

var shouldShowDaysOut = true 
var animationFinished = true 

var selectedDay:DayView! 

var currentCalendar: Calendar? 

override func awakeFromNib() { 
    let timeZoneBias = 480 // (UTC+08:00) 
    currentCalendar = Calendar.init(identifier: .gregorian) 
    if let timeZone = TimeZone.init(secondsFromGMT: -timeZoneBias * 60) { 
     currentCalendar?.timeZone = timeZone 
    } 
} 


@IBOutlet weak var topCalBtnView = UIView() 
@IBOutlet weak var sideBtnView = UIView() 
@IBOutlet weak var calendarBigView = UIView() 
@IBOutlet weak var filterBtn = UIButton() 
@IBOutlet weak var calTable = UITableView() 
@IBOutlet weak var calView = UIView() 
var calendarContectObj = CVCalendarContentViewController() 


convenience init() { 
    self.init(nibName:nil, bundle:nil) 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.navigationController?.navigationBar.isHidden = true 

    //Calendar Stuff 
    if let currentCalendar = currentCalendar { 
     monthLabel.text = CVDate(date: Date(), calendar: currentCalendar).globalDescription 
    } 

    randomizeDotMarkers() 
    // Do any additional setup after loading the view. 
} 

override func viewWillAppear(_ animated: Bool) { 
    self.setLayout() 
    navigationController?.interactivePopGestureRecognizer?.isEnabled = false 

} 

func setLayout(){ 
    ConstantFile.roundViewCorner(customVw: topCalBtnView!) 
    ConstantFile.roundViewCorner(customVw: sideBtnView!) 
    ConstantFile.roundViewCorner(customVw: calendarBigView!) 
    ConstantFile.makeRoundBtnWithCornerRadius(btn: filterBtn!, cornerRadius: 0.02) 
    ConstantFile.roundTableViewCorner(tableVw: calTable!) 

} 

//Mark:- IBAction 
@IBAction func toggleMenuBtn(_ sender: Any) { 
    let appDelegate: AppDelegate = UIApplication.shared.delegate as! AppDelegate 
    appDelegate.centerDrawwerController?.toggle(MMDrawerSide.left, animated: true, completion: nil) 
} 

//MARK:- UITableView Delegate and Data Source 
func numberOfSections(in tableView: UITableView) -> Int { 
    return 1 
} 

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return 4 
} 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cellId") 
    let cell = tableView.dequeueReusableCell(withIdentifier: "cellId", for: indexPath) 
    return cell 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 

//Mark:- Calendar Stuff 
@IBAction func removeCircleAndDot(sender: AnyObject) { 
    if let dayView = selectedDay { 
     calendarView.contentController.removeCircleLabel(dayView) 

     if dayView.date.day < randomNumberOfDotMarkersForDay.count { 
      randomNumberOfDotMarkersForDay[dayView.date.day] = 0 
     } 

     calendarView.contentController.refreshPresentedMonth() 
    } 
} 

@IBAction func refreshMonth(sender: AnyObject) { 
    calendarView.contentController.refreshPresentedMonth() 

    randomizeDotMarkers() 
} 

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 

    calendarView.commitCalendarViewUpdate() 
    menuView.commitMenuViewUpdate() 
} 

private func randomizeDotMarkers() { 
    randomNumberOfDotMarkersForDay = [Int]() 
    for _ in 0...31 { 
     randomNumberOfDotMarkersForDay.append(Int(arc4random_uniform(3) + 1)) 
    } 
} 

/* 
// MARK: - Navigation 

// In a storyboard-based application, you will often want to do a little preparation before navigation 
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    // Get the new view controller using segue.destinationViewController. 
    // Pass the selected object to the new view controller. 
} 
*/ 

} 
+0

什么是calendarView? –

+0

如何声明'calendarView'属性'contentController'?如何声明'removeCircleLabel()'? – Larme

+0

这是CVCalendarView的一个对象。 – manku

回答

0

默认情况下,所有的方法,变量,常量等都是内部的。对于内部保护级别,这些方法,变量,常量等不能在模块外访问。

removeCircleLabel(:_)是日历模块的内部方法,您需要公开才能访问它。

也请阅读:What is the 'open' keyword in Swift? 这解释了何时应该使用public和open。

0

在我的快速搜索,我发现功能removeCircleLabelCVCalendarContentViewControllerGitHub

// MARK: Delete circle views (in effect refreshing the dayView circle) 
extension CVCalendarContentViewController { 
    func removeCircleLabel(_ dayView: CVCalendarDayView) { 
     for each in dayView.subviews { 
      if each is UILabel { 
       continue 
      } else if each is CVAuxiliaryView { 
       continue 
      } else { 
       each.removeFromSuperview() 
      } 
     } 
    } 
} 

很明显,您可以从您的控制器访问此方法。没有保护。请检查您的日历查看来源与最新的一个。

+0

我正在使用相同的方法。我已添加此代码。 – manku

+0

@manku尝试通过CVCalendarContentViewController创建对象和直接调用传递你calendarview.else你能做到在乌拉圭回合结束时过我创建对象 –

+0

VAR calendarContectObj = CVCalendarContentViewController() 然后它给这个错误“‘CVCalendarContentViewController’与没有参数“ – manku

相关问题