2013-02-14 3 views
0

Kal Calendar을 사용하여 캘린더보기를 내 앱에 추가하고 있지만 이벤트 목록에 didSelectRowAtIndexPath 메소드를 구현하는 데 문제가 있습니다. 사용자가 주어진 날짜에 이벤트를 선택하면보기 컨트롤러를 밀고 싶습니다. "KalView.m", "KalViewController.m"및 "KalDataSource.m"에 메서드를 넣으려고했지만 아무 것도 인식되지 않습니다. 그런 방법을 부를 곳은 어디입니까?칼 캘린더를 사용하여 이벤트 선택

답변

1

나는 비슷한 문제를 한 번 겪었는데, 여기 어떻게 구현 했는가?

#import <MTDates/NSDate+MTDates.h> 
#import <ObjectiveSugar/ObjectiveSugar.h> 
#import <UIImageView+WebCache.h> 

#import "EventsViewController.h" 
#import "EventDetailsViewController.h" 
#import "EventCell.h" 
#import "Event.h" 

#import "KalViewController.h" 
#import "CalendarViewController.h" 

@implementation EventsViewController 

- (id)initWithEvents:(NSArray *)_events { 
    self = [super init]; 
    events = _events; 
    return self; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [self listUpdated]; 
    [self addCalendarView]; 
} 

- (void)listUpdated 
    { 

     NSMutableArray *allEvents = [NSMutableArray array]; 
     [allEvents addObjectsFromArray:events]; 

     NSArray *sortedArray = [allEvents sortedArrayUsingComparator:^NSComparisonResult(Event *obj1, Event *obj2) { 
      return [obj1.date compare:obj2.date]; 
     }]; 

     _allEvents = sortedArray; 
    } 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return [_allEvents count]; 
} 

- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
//custom table cell (EventCell is a view I'm initialising my rows with) 
    Event *event = _allEvents[indexPath.row]; 
    NSString *reuseIdentifier = [NSString stringWithFormat:@"Cell%@%@", event.venue.identifier, event.identifier]; 
    EventCell *cell = (EventCell*) [tableView dequeueReusableCellWithIdentifier:reuseIdentifier]; 
    if (!cell) { 
     cell = [EventCell createDetailedCellWithReuseIdentifier:reuseIdentifier]; 
     cell.nameLabel.text = event.name; 
    } 
    return cell; 
} 


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    Event *event = _allEvents[indexPath.row]; 
    EventDetailsViewController *controller = [[EventDetailsViewController alloc] initWithEvent:event]; 
    [self.navigationController pushViewController:controller animated:YES]; 
} 

- (void) addCalendarView{ 
    _calenderView = [[KalViewController alloc] initWithSelectedDate:[NSDate date]]; 
    [[self.view viewWithTag:2] addSubview:_calenderView.view]; /* depends on your requirements*/ 
    _calenderView.view.tag = 200; /* not necessary */ 
    [_calenderView.view setFrame:self.view.bounds]; 
    _calenderView.dataSource = self; 
    _calenderView.delegate = self; 
} 

- (void)loadItemsFromDate:(NSDate *)fromDate toDate:(NSDate *)toDate { 
    //NSLog(@"%@, %@", fromDate, toDate); 
    // filter and pass the array to the events tableview 
    [self filterByDateSelected:toDate]; 
} 

-(void)presentingDatesFrom:(NSDate *)fromDate to:(NSDate *)toDate delegate:(id<KalDataSourceCallbacks>)delegate 
{ 
    /** when selecting a different month **/ 
} 

- (void)removeAllItems 
{ 
    NSLog(@"Items Removed"); 
    // remove all the previous items from the tableview 
} 

-(void) filterByDateSelected: (NSDate *)selectedDate 
{ 
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setDateFormat:@"yyyy-MM-dd"]; 

    NSString *theDate = [dateFormat stringFromDate:selectedDate]; 
    NSDate *_date = [NSDate dateFromString:theDate usingFormat:@"yyyy-MM-dd"]; 

    // filter table by selectedDate 
    NSArray *_dateFilteredEvents = _allEvents; 

    _dateFilteredEvents = [_allEvents filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(Event *evaluatedEvent, NSDictionary *bindings) { 
     if ([evaluatedEvent.date isEqualToDate:_date]) { 
      return YES; 
     } 
     return NO; 
    }]]; 
    NSLog(@"%@", _dateFilteredEvents); 

    // uncomment the following line if you want to display list in another controller 
    //[self showEventsByDate:_dateFilteredEvents]; 

    // or else refresh table after updating the list 
    _allEvents = _dateFilteredEvents; 
     [_tableView reloadData]; 
} 

- (void) showEventsByDate:(NSArray*)events 
{ 
    if (events.count > 0) { 
     CalendarViewController *_controller = [[CalendarViewController alloc] initWithEventArray:events]; 
     [self.navigationController pushViewController:_controller animated:YES]; 
    } 
} 

- (void) removeCalenderView{ 
    [_calenderView.view removeFromSuperview]; 
} 

@end 
+0

나는 결국 내가 닮았 어. 내 주요 쟁점은 대의원이 제대로 설정되지 않았다는 것이 었습니다. :) – user1390486

+0

문제가 해결되었다고 들었습니다. :) – LeoSarena

관련 문제