メソッドをクラス メソッドの代わりにインスタンス メソッドに変更する (「+」ではなく「-」) クラスのインスタンスを作成し、次のように単純に呼び出します。
MyClass *classInstance = [[MyClass alloc] init];
[classInstance changeButtonText:@"stringText"];
また、IBOutlets の弱いプロパティを持つことをお勧めします。
@property (nonatomic, weak) IBOutlet UIButton *myButton;
[編集]
セグエに関する2番目の問題について。まず、単に UIDatePicker を表示するために別のビュー コントローラーが本当に必要ですか? 私は通常、actionSheet を使用して同じ UIViewController にそれらを表示します。適切に処理するには少し手間がかかりますが、この問題は解決します。よろしければコードを投稿できますか?
とにかく、現在の設定を維持したい場合は、次のようにします。
ボタンを含む ViewController で、.h ファイルに新しい public NSString プロパティを作成します。
@property (非アトミック、強力) NSString *dateString;
日付ピッカーを含むビュー コントローラーで、ユーザーが日付を選択した後、perpareForSegue メソッドをオーバーライドします。ここで、目的のView Controller(上記のポイント1で作成されたボタンと新しい文字列プロパティを持つもの)を取得し、dateStringを設定します。
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
MyViewController *todayViewController = (MyViewController*)[segue destinationViewController];
[todayViewController setDateString:@"valueYouRequire"];
}
ボタンを含む ViewController で、viewDidLoad のボタンのタイトルを dateString に設定します。
- (void)viewDidLoad { [super viewDidLoad];
if (self.dateString) [self.myTodayButton setTitle:self.dateString forState:UIControlStateNormal]; }
[編集]
actionSheet ルートをたどりたい場合は、このメソッドをボタン付きの ViewController に追加し、必要に応じてフレーム サイズを調整します。以下のメソッドは、日付ピッカーを作成し、actionSheet に追加して、actionSheet を表示します。
- (IBAction) datePressed:(id)sender {
if (!_actionSheet) {
_actionSheetFrame = CGRectMake(0, self.view.frame.size.height - 373, 320, 403);
_actionSheetBtnFrameOk = CGRectMake(20, 330, 280, 50);
_actionSheetBtnFreameCancel = CGRectMake(20, 275, 280, 50);
_pickerFrame = CGRectMake(0, 50, 320, 216);
_actionSheet = [[UIActionSheet alloc] initWithTitle:@"Select Date" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles:@"OK", nil];
_datePicker = [[UIDatePicker alloc] init];
[_datePicker setDatePickerMode:UIDatePickerModeDate];
[_actionSheet addSubview:_datePicker];
}
[_datePicker setMaximumDate:[NSDate date]];
[_actionSheet showInView:self.view.superview];
[[[_actionSheet subviews] objectAtIndex:kActionBtnIndexOk] setFrame:_actionSheetBtnFrameOk];
[[[_actionSheet subviews] objectAtIndex:kActionBtnIndexCancel] setFrame:_actionSheetBtnFreameCancel];
[_actionSheet setFrame:_actionSheetFrame];
[_datePicker setFrame:_pickerFrame];
}
ユーザーが目的の日付を選択したら、UIActionSheetDelegate メソッドを実装してボタンのテキストを設定する必要もあります。
#pragma mark - UIActionSheet Delegate Methods
- (void) actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex {
if (buttonIndex == 0) {
[self.myTodayButton setTitle:self.dateStringFromSelectedDate forState:UIControlStateNormal];
}
}