将方法更改为实例方法而不是类方法(“-”而不是“+”)创建类的实例,然后像这样简单地调用它:
MyClass *classInstance = [[MyClass alloc] init];
[classInstance changeButtonText:@"stringText"];
还建议对 IBOutlets 具有弱属性。
@property (nonatomic, weak) IBOutlet UIButton *myButton;
[编辑]
关于你与 segues 的第二个问题。首先,您真的需要一个不同的视图控制器来简单地显示 UIDatePicker 吗?我通常使用 actionSheet 在同一个 UIViewController 中显示它们,它需要做一些工作才能做到恰到好处,但可以解决这个问题。如果你愿意,我可以发布代码吗?
无论如何,如果您想保留当前的设置,我会执行以下操作:
在包含按钮的 ViewController 中,在 .h 文件中创建一个新的公共 NSString 属性。
@property (nonatomic, strong) NSString *dateString;
在包含日期选择器的 View Controller 中,在用户选择日期后,覆盖 perpareForSegue 方法。在这里获取目标视图控制器(即上面第一点中创建的具有按钮和新字符串属性的视图控制器)并设置 dateString。
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
MyViewController *todayViewController = (MyViewController*)[segue destinationViewController];
[todayViewController setDateString:@"valueYouRequire"];
}
在带有按钮的 ViewController 中,将 viewDidLoad 中的按钮标题设置为 dateString。
- (void)viewDidLoad { [超级 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];
}
}