1

私はIOS開発に不慣れです。ユーザーの詳細についてユーザーがフォームに入力する必要があるアプリを開発しています。詳細には、UIDatePicker を使用している生年月日フィールドが含まれています。これらの UIDatePicker と UIActionSheet をプログラムで追加していて、ラベルの日付を更新したかったのです。日付は更新されていますが、同じラベルで上書きされています。

ここにコードがあります

-(IBAction)dateButtonClicked:(id)sender {

    actionSheet = [[UIActionSheet alloc] initWithTitle:@"Choose Date"delegate:self cancelButtonTitle:@"cancel" destructiveButtonTitle:nil otherButtonTitles:@"Select",nil];                                                           
    [actionSheet showInView:self.view ];
    [actionSheet setFrame:CGRectMake(0, 117, 320, 383)];

}

- (void)willPresentActionSheet:(UIActionSheet *)actionSheet {
    datePickerView = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 40, 320, 216)];
    [datePickerView  setMinuteInterval:5];
    [datePickerView  setTag: kDatePickerTag];
    [actionSheet addSubview:datePickerView];
    datelabel = [[UILabel alloc] init];
    datelabel.frame = CGRectMake(55, 92, 300, 50);
    datelabel.backgroundColor = [UIColor clearColor];
    datelabel.textColor = [UIColor blackColor];
    datelabel.font = [UIFont fontWithName:@"Verdana-Bold" size: 12.0];
    datelabel.textAlignment = UITextAlignmentCenter;
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat: @"MM/dd/YYYY h:mm a"];
    datelabel.text = [NSString stringWithFormat:@"%@",
                      [formatter stringFromDate:[NSDate date]]];
    [self.view addSubview:datelabel];
    NSArray *subviews = [actionSheet subviews];
    [[subviews objectAtIndex:SelectButtonIndex] setFrame:CGRectMake(20, 266, 280, 46)];
    [[subviews objectAtIndex:CancelButtonIndex] setFrame:CGRectMake(20, 317, 280, 46)];
}

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (buttonIndex != [actionSheet cancelButtonIndex]) {

        [datePickerView addTarget:self
                       action:@selector(LabelChange:)
             forControlEvents:UIControlEventValueChanged];


        // UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Date" message:msg delegate:nil cancelButtonTitle: @"Dismiss" otherButtonTitles:nil];
       // [alert show];
    }
}

- (void)LabelChange:(id)sender{
    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    df.dateStyle = NSDateFormatterMediumStyle;
    datelabel.text = [NSString stringWithFormat:@""];
    datelabel.text = [NSString stringWithFormat:@"%@",
                      [df stringFromDate:datePickerView.date]];
}

このような問題を回避するには、変更を行う必要があることをお知らせください。

4

2 に答える 2

1

このコードは私にとって魅力のように機能します!!!

.h ファイル内

#import <UIKit/UIKit.h>

@interface EXPViewController : UIViewController <UIPickerViewDataSource,       UIPickerViewDelegate, UIActionSheetDelegate>{
UIActionSheet *pickerViewPopup;
UIDatePicker *pickerView;
IBOutlet UILabel *dateLabel;
}

- (IBAction)dateButtonClicked:(id)sender;

@end

.m ファイル内:

-(IBAction)dateButtonClicked:(id)sender{
 [self showPickerView];
}

-(void)showPickerView {

pickerViewPopup = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];

pickerView = nil;
    pickerView = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 44, 0, 0)];
    ((UIDatePicker*)pickerView).datePickerMode = UIDatePickerModeDate;
    ((UIDatePicker*)pickerView).date = [NSDate date];

UIToolbar *pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
pickerToolbar.barStyle = UIBarStyleBlackOpaque;
[pickerToolbar sizeToFit];

NSMutableArray *barItems = [[NSMutableArray alloc] init];

UIBarButtonItem *cancelBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelButtonPressed:)];
[barItems addObject:cancelBtn];

UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
[barItems addObject:flexSpace];

UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneButtonPressed:)];
[barItems addObject:doneBtn];

[pickerToolbar setItems:barItems animated:YES];
[barItems release];

[pickerViewPopup addSubview:pickerToolbar];
[pickerViewPopup addSubview:pickerView];
[pickerViewPopup showInView:self.view];
[pickerViewPopup setBounds:CGRectMake(0, 0, 320, 464)];
}

-(void)doneButtonPressed:(id)sender {
//Do something here here with the value selected using [pickerView date] to get that value
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"dd, MMM YYYY"];
    NSString* dateString = [dateFormat stringFromDate:((UIDatePicker*)pickerView).date];
   yourLabel.text = dateString;

[pickerViewPopup dismissWithClickedButtonIndex:1 animated:YES];
}

-(void)cancelButtonPressed:(id)sender{
[pickerViewPopup dismissWithClickedButtonIndex:1 animated:YES];
}
于 2012-12-15T09:48:15.343 に答える
0

これは、あなたのdateButtonClickedアクションが fire でdatePickerViewあり、datelabel何度も何度も割り当てているときはいつでも、あなたのコードdatePickerViewdatelabelコードを dateButtonClicked clicked の外に置くだけでよいからです。viewDIdLoad

ピッカーのデリゲートメソッドを実装できますが、

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{

}
于 2012-12-15T09:48:24.030 に答える