Как использовать JTCalendar в Swift?

Я создаю пользовательский календарь с использованием JTCalendar. Я создал его с помощью JTcalendar в Objective-C. Теперь я хочу использовать то же самое в Swift. Я пытался использовать Briding-Header, но все равно он показывает, что файл JTCalendar не существует ошибки.

Пожалуйста, предложите.

2 ответа

Решение

Я только что настроил JTCalendar в проекте Swift, используя мосты.

  1. Скачать образец кода

  2. Перетащите папку JTCalendar в свой проект.

  3. Убедитесь, что мост является

$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h

  1. настройте IBOutlet и Delegate, остальные вы должны выяснить.
  • В podfile напишите модуль 'JTCalendar', '~> 2.0' и установите модуль.
  • Создайте одно представление с пользовательским классом JTCalendarMenuView и предоставьте выход для ссылки как calendarMenuView.
  • Создайте другое представление с пользовательским классом JTHorizontCalendarView и предоставьте ссылку на выход в виде calendarContentView.
  • Импортировать JTCalendar и реализовать делегат JTCalendar

    импорт JTCalendar
    Класс ViewController: UIViewController, JTCalendarDelegate

  • Создайте выход для CalendaManager и объявите некоторую переменную, которую мы использовали позже.

    @IBOutlet weak var calendarMenuView: JTCalendarMenuView!
    @IBOutlet weak var calendarContentView: JTHorizontalCalendarView!
    @IBOutlet var calendarManager : JTCalendarManager!
    
    var todayDate = NSDate()
    var minDate = NSDate()
    var maxDate = NSDate()
    var dateSelected = NSDate()
    
  • В ViewDidLoad инициализируйте CalendarManager, предоставьте deletegete и установите viewview, contentview и setDate.

    override func viewDidLoad() {
    
    super.viewDidLoad()
    
    calendarManager = JTCalendarManager.init()
    calendarManager.delegate = self
    
    createMinAndMaxDate()
    
    calendarManager.menuView = calendarMenuView
    calendarManager.contentView = calendarContentView
    let mydate = Date()
    calendarManager.setDate(mydate)
    }
    
  • Создать функцию для минимальной и максимальной даты, которую вы хотите отобразить в календаре.

     func createMinAndMaxDate(){
    
        todayDate = NSDate()
    
        minDate = calendarManager.dateHelper.add(to: todayDate as Date!, months: -6) as NSDate
    
        maxDate = calendarManager.dateHelper.add(to: todayDate as Date!, months: 6) as NSDate
    
    }
    
  • В методе canDisplayPageWithDate задайте минимальную и максимальную дату

    public func calendar(_ calendar: JTCalendarManager!, canDisplayPageWith date: Date!) -> Bool {
        return calendarManager.dateHelper.date(date, isEqualOrAfter: minDate as Date!, andEqualOrBefore: maxDate as Date!)
    
    }
    
  • Используйте метод prepareDayView

    public func calendar(_ calendar: JTCalendarManager!, prepareDayView dayView: UIView!){
    
        // Today
        let mydayview=dayView as! JTCalendarDayView
        if(calendarManager.dateHelper.date(NSDate() as Date!, isTheSameDayThan: mydayview.date))
        {
            mydayview.circleView.isHidden = false;
            mydayview.dotView.backgroundColor = UIColor.blue
            mydayview.textLabel.textColor = UIColor.white
        }
        // Selected date
        else if(String(describing: dateSelected) != "" && calendarManager.dateHelper.date(dateSelected as Date!, isTheSameDayThan: mydayview.date))
        {
            mydayview.circleView.isHidden = false;
            mydayview.circleView.backgroundColor = UIColor.red
            mydayview.dotView.backgroundColor = UIColor.white
            mydayview.textLabel.textColor = UIColor.white
        }
        // Other month
        else if(calendarManager.dateHelper.date(calendarContentView.date, isTheSameMonthThan: mydayview.date))
        {
            mydayview.circleView.isHidden = true;
            mydayview.dotView.backgroundColor = UIColor.red
            mydayview.textLabel.textColor = UIColor.black
        }
        // Another day of the current month
        else
        {
            mydayview.circleView.isHidden = true;
            mydayview.dotView.backgroundColor = UIColor.red
            mydayview.textLabel.textColor = UIColor.lightGray
        }
    
    }
    
  • Используйте метод didTouchDayView для анимации, когда пользователь выбирает и перикулярную дату, и переходите к следующему и предыдущему месяцу, если эта дата выбрана.

    public func calendar(_ calendar: JTCalendarManager!, didTouchDayView dayView: UIView!) {
        let mydayview=dayView as! JTCalendarDayView
        dateSelected=mydayview.date as NSDate
    
        UIView.transition(with: mydayview, duration: 0.3, options: UIViewAnimationOptions(rawValue: 0), animations: {
           mydayview.circleView.transform = CGAffineTransform.identity
            self.calendarManager.reload()
        }, completion: nil)
    
        if(!calendarManager.dateHelper.date(calendarContentView.date, isTheSameMonthThan: mydayview.date)){
            if(calendarContentView.date.compare(mydayview.date) == ComparisonResult.orderedAscending)
            {
                calendarContentView.loadNextPageWithAnimation()
            }
            else{
                calendarContentView.loadPreviousPageWithAnimation()
            }
        }
      }
    
Другие вопросы по тегам