4

私はiOS開発に非常に慣れていません。クリックでカレンダーを追加する必要がありUITextFieldます。を追加したくないので、カスタムカレンダーを追加するにはどうすればよいですかUIDatePicker

4

3 に答える 3

4

まず、カレンダーをさまざまな方法で実装します。ただし、ほとんどの場合、 TapkuLibrary http://github.com/devinross/tapkulibraryでカレンダーを作成して簡単に取得し、このTapkuLibraryをクラスファイルに実装します。表示カレンダーに次のコードを実装した後

headerFile.h

#import <UIKit/UIKit.h>
#import "Libraries/TapkuLibrary/TKCalendarMonthView.h"

@interface calendarViewController : UIViewController<TKCalendarMonthViewDelegate,TKCalendarMonthViewDataSource, UITextFieldDelegate> 
{
    TKCalendarMonthView *calendar;
    UITextField *txtField;
}
@property(nonatomic,retain)UITextField *txtField; 

@終わり

実装ファイル.h

//@synthesize.............。

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
   [self doAddAction];   
    return YES;
}


-(void)doAddAction
{
    calendar=[[TKCalendarMonthView alloc] init];
    calendar.frame=CGRectMake(0,0,calendar.frame.size.width,calendar.frame.size.height);
    calendar.delegate=self;
    calendar.dataSource=self;
    [self.view addSubview:calendar];
}
#pragma mark -
#pragma mark TKCalendarMonthViewDelegate methods

- (void)calendarMonthView:(TKCalendarMonthView *)monthView didSelectDate:(NSDate *)d
{
    NSDateFormatter *objDateFormatter = [[NSDateFormatter alloc] init];
    [objDateFormatter setDateFormat:@"dd-MM-yyyy"];
   NSLog(@"%@",[objDateFormatter stringFromDate:d]);

}

- (void)calendarMonthView:(TKCalendarMonthView *)monthView monthDidChange:(NSDate *)d {
    NSLog(@"calendarMonthView monthDidChange");
}

#pragma mark -
#pragma mark TKCalendarMonthViewDataSource methods

- (NSArray*)calendarMonthView:(TKCalendarMonthView *)monthView marksFromDate:(NSDate *)startDate toDate:(NSDate *)lastDate {
    NSLog(@"calendarMonthView marksFromDate toDate");
    NSLog(@"Make sure to update 'data' variable to pull from CoreData, website, User Defaults, or some other source.");
    // When testing initially you will have to update the dates in this array so they are visible at the
    // time frame you are testing the code.
    NSArray *data = [NSArray arrayWithObjects:
                     @"2011-01-01 00:00:00 +0000", @"2011-01-09 00:00:00 +0000", @"2011-01-22 00:00:00 +0000",
                     @"2011-01-10 00:00:00 +0000", @"2011-01-11 00:00:00 +0000", @"2011-01-12 00:00:00 +0000",
                     @"2011-01-15 00:00:00 +0000", @"2011-01-28 00:00:00 +0000", @"2011-01-04 00:00:00 +0000",
                     @"2011-01-16 00:00:00 +0000", @"2011-01-18 00:00:00 +0000", @"2011-01-19 00:00:00 +0000",
                     @"2011-01-23 00:00:00 +0000", @"2011-01-24 00:00:00 +0000", @"2011-01-25 00:00:00 +0000",
                     @"2011-02-01 00:00:00 +0000", @"2011-03-01 00:00:00 +0000", @"2011-04-01 00:00:00 +0000",
                     @"2011-05-01 00:00:00 +0000", @"2011-06-01 00:00:00 +0000", @"2011-07-01 00:00:00 +0000",
                     @"2011-08-01 00:00:00 +0000", @"2011-09-01 00:00:00 +0000", @"2011-10-01 00:00:00 +0000",
                     @"2011-11-01 00:00:00 +0000", @"2011-12-01 00:00:00 +0000", nil];


    // Initialise empty marks array, this will be populated with TRUE/FALSE in order for each day a marker should be placed on.
    NSMutableArray *marks = [NSMutableArray array];

    // Initialise calendar to current type and set the timezone to never have daylight saving
    NSCalendar *cal = [NSCalendar currentCalendar];
    [cal setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

    // Construct DateComponents based on startDate so the iterating date can be created.
    // Its massively important to do this assigning via the NSCalendar and NSDateComponents because of daylight saving has been removed
    // with the timezone that was set above. If you just used "startDate" directly (ie, NSDate *date = startDate;) as the first
    // iterating date then times would go up and down based on daylight savings.
    NSDateComponents *comp = [cal components:(NSMonthCalendarUnit | NSMinuteCalendarUnit | NSYearCalendarUnit |
                                              NSDayCalendarUnit | NSWeekdayCalendarUnit | NSHourCalendarUnit | NSSecondCalendarUnit)
                                    fromDate:startDate];
    NSDate *d = [cal dateFromComponents:comp];

    // Init offset components to increment days in the loop by one each time
    NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];
    [offsetComponents setDay:1];


    // for each date between start date and end date check if they exist in the data array
    while (YES) {
        // Is the date beyond the last date? If so, exit the loop.
        // NSOrderedDescending = the left value is greater than the right
        if ([d compare:lastDate] == NSOrderedDescending) {
            break;
        }

        // If the date is in the data array, add it to the marks array, else don't
        if ([data containsObject:[d description]]) {
            [marks addObject:[NSNumber numberWithBool:YES]];
        } else {
            [marks addObject:[NSNumber numberWithBool:NO]];
        }

        // Increment day using offset components (ie, 1 day in this instance)
        d = [cal dateByAddingComponents:offsetComponents toDate:d options:0];
    }

    [offsetComponents release];

    return [NSArray arrayWithArray:marks];
}
于 2012-10-12T11:32:25.573 に答える
0

カレンダーを追加したいのですが、日付ピッカーを使用したくないと思いますよね?? だからここにいくつかのリンクがあります...私はそれらがあなたの問題を解決すると思うそれらをチェックしてください。

http://www.cocoacontrols.com/platforms/ios/controls/occalendar

http://www.cocoacontrols.com/platforms/ios/controls/pmcalendar

http://www.cocoacontrols.com/platforms/ios/controls/ckcalendar

さまざまな種類のカスタムメイドのカレンダーが含まれています..問題があれば教えてください:)

于 2012-10-12T11:22:01.540 に答える
0

カレンダービューコントローラが組み込まれていないのはちょっと衝撃的ですが、ありません。私は彼らがiOS4のEventKitで1つ追加することを本当に期待していましたが、そうではありませんでした。Kalは頭を動かすのが少し難しいですが、Kalの考え方を理解すれば、実装は簡単です。

http://github.com/klazuka/Kal

このリンクでカレンダーのライブラリ全体を参照してください...

http://www.cocoacontrols.com/search?utf8=%E2%9C%93&q=Calendar

また、このtapkuライブラリも非常に便利なライブラリです。

http://maniacdev.com/2011/09/tutorial-using-the-tapku-library-to-create-an-elegant-marked-calendar/

また、イベントを発生させることができますtextFieldDidBeginEditing:

:)

于 2012-10-12T11:23:18.823 に答える