2012-05-06 4 views
0

したがって、ユーザーがUITextFieldをタップしたときにキーボードの代わりにUIDatePickerを取得する方法に関するチュートリアルに続きました。showInViewがクリッピングを引き起こしています

Presenting action sheet clipped by its superview. Some controls might not respond to touches. On iPhone try -[UIActionSheet showFromTabBar:] or -[UIActionSheet showFromToolbar:] instead of -[UIActionSheet showInView:]. 

私は他の方法を試してみましたが、彼らはどちらか動作しませんでした、また私はそれらを期待しなかった:私は取得しています問題は、ピッカーが起動したとき、それはクリップされ、それがコンソールにこのメッセージを与えるということですに。誰かが下のコードを見て、いくつかのアドバイスを提供することができれば、それは素晴らしいだろう。感謝:)

AddShiftViewController.h

#import <UIKit/UIKit.h> 
#import "AppDelegate.h" 
#import "Shift.h" 

@interface AddShiftsViewController : UIViewController <UITextFieldDelegate> 

@property (weak, nonatomic) IBOutlet UITextField *jobTitleField; 
@property (weak, nonatomic) IBOutlet UITextField *startDateField; 
@property (weak, nonatomic) IBOutlet UITextField *endDateField; 

@property (nonatomic, strong) NSDate *startDate; 
@property (nonatomic, strong) NSDate *endDate; 

@property (nonatomic, strong) UIActionSheet *dateSheet; 

- (void)setDate; 
- (void)dismissPicker; 
- (void)cancelPicker; 

- (IBAction)addShift:(id)sender; 

@end 

AddShiftViewController.m

#import "AddShiftsViewController.h" 

@interface AddShiftsViewController() 

@end 

@implementation AddShiftsViewController 
@synthesize jobTitleField; 
@synthesize startDateField; 
@synthesize endDateField; 
@synthesize startDate, endDate, dateSheet; 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 

    AppDelegate *dataCenter = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
} 

- (void)viewDidUnload 
{ 
    [self setJobTitleField:nil]; 
    [self setStartDateField:nil]; 
    [self setEndDateField:nil]; 
    [self setEndDate:nil]; 
    [self setStartDate:nil]; 
    [self setDateSheet:nil]; 
    [super viewDidUnload]; 
    // Release any retained subviews of the main view. 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation 
{ 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

- (IBAction)addShift:(id)sender { 
    Shift *newShift = [[Shift alloc] init]; 
} 

- (void)setDate { 
    dateSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:nil cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil]; 

    [dateSheet setActionSheetStyle:UIActionSheetStyleDefault]; 

    CGRect pickerFrame = CGRectMake(0, 44, 0, 0); 
    UIDatePicker *picker = [[UIDatePicker alloc] initWithFrame:pickerFrame]; 
    [picker setDatePickerMode:UIDatePickerModeDateAndTime]; 

    [dateSheet addSubview:picker]; 

    UIToolbar *controlToolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, dateSheet.bounds.size.width, 44)]; 

    [controlToolBar setBarStyle:UIBarStyleDefault]; 
    [controlToolBar sizeToFit]; 

    UIBarButtonItem *spacer = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil]; 

    UIBarButtonItem *setButton = [[UIBarButtonItem alloc] initWithTitle:@"Set" style:UIBarButtonItemStyleDone target:self action:@selector(dismissPicker)]; 

    UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStyleBordered target:self action:@selector(cancelPicker)]; 

    [controlToolBar setItems:[NSArray arrayWithObjects:spacer, cancelButton, setButton, nil] animated:NO]; 

    [dateSheet addSubview:controlToolBar]; 

    [dateSheet showInView:self.view]; 

    [dateSheet setBounds:CGRectMake(0, 0, 420, 385)]; 
} 

- (void)dismissPicker { 
    NSArray *listOfViews = [dateSheet subviews]; 
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setDateFormat:@"MMMM d, yyyy at H:mm"]; 

    for (UIView *subView in listOfViews) { 
     if ([subView isKindOfClass:[UIDatePicker class]]) { 
      if (self.startDateField.isEditing) { 
       self.startDate = [(UIDatePicker *)subView date]; 
       [self.startDateField setText:[formatter stringFromDate:self.startDate]]; 
       [dateSheet dismissWithClickedButtonIndex:0 animated:YES]; 
      } 
      else if (self.endDateField.isEditing) { 
       self.endDate = [(UIDatePicker *)subView date]; 
       [self.endDateField setText:[formatter stringFromDate:self.endDate]]; 
       [dateSheet dismissWithClickedButtonIndex:0 animated:YES]; 
      } 
     } 
    } 
} 

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

- (void)cancelPicker { 
    [dateSheet dismissWithClickedButtonIndex:0 animated:YES]; 
} 

@end 

Shifts.h(カスタムクラス)

#import <Foundation/Foundation.h> 

@interface Shift : NSObject 

@property (nonatomic, strong) NSString *jobTitle; 
@property (nonatomic, strong) NSString *employer; 
@property (nonatomic, strong) NSDate *startDate; 
@property (nonatomic, strong) NSDate *endDate; 

@end 

EDIT

だから、私はへの切り替えを試してみました:

[dateSheet showFromTabBar:self.tabBarController.tabBar]; 

しかし、それはまだクリッピングされます。私は何が起こっているかを正確に示すために写真を添付し​​ました。

enter image description here

答えて

3

[dateSheet setBounds:CGRectMake(0, 0, 420, 385)]; 

は次のようになります。

[dateSheet setBounds:CGRectMake(0, 0, 320, 485)]; 

w iPhoneの画面の幅は420ピクセルではありません:)古典的な画面は320幅(肖像画)または網膜ディスプレイ上の640幅です。他にもエラーがあるかもしれませんが、これは私にとって目立つものです。

+0

うん、それだった:) Thanks Nethfel。 – Barks

0

まず、あなたはフレーム幅nの高さが正しいことを確認します。

CGRect pickerFrame = CGRectMake(0, 44, 0, 0); // (params) x , y, width, height 

このフレームを使用したピッカービューの幅と高さは0であるため、正しく表示されません。いくつかの幅または高さでUIDatePickerを作成してみてください。

また、UITabBarControllerの一部であるコントローラーを使用してUIActionSheetを表示しようとしていますか? もしそうなら、代わりの

[datesheet showInView:self.view]; 

使用しますが、この行に少し数字を降りたかもしれないように見えます

[datesheet showFromTabBar:self.tabBarController.tabBar]; 
+0

これはチュートリアルで使用されていた値であり、正常に動作しているとは思えません。とにかく320と300に設定しようとしましたが、何も変更されませんでした。私は何が起こっているかを示すスクリーンショットを添付しました。私はshowFromTabBarを使用するために連鎖しようとしましたが、運はありませんでした。( – Barks

関連する問題