在我的应用程序中,当用户单击工具栏中的保存按钮时,然后通过 UIAlertView 提示用户通过选择另存为图像或另存为播放来保存当前工作的方式。当用户选择另存为播放时,他们会收到第二个 UIAlertView 提示,该视图也有一个文本字段供他们插入播放的名称。我想要实现的是,当没有输入文本时,“确定”按钮被禁用,当输入的文本长度为 1 或更多时,文件就可以被保存(使用归档器,这可以正常工作,所以这不是问题),然后启用“确定”按钮。下面列出的是显示两个警报视图的代码,以及选择视图的不同项目时会发生什么。
- (IBAction)selectSaveType {
UIAlertView *message = [[UIAlertView alloc] initWithTitle:@""
message:@"Please Select an Option."
delegate:self
cancelButtonTitle:@"Save Play"
otherButtonTitles:@"Save to Photos", nil];
[message show];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
NSString *title = [alertView buttonTitleAtIndex:buttonIndex];
if([title isEqualToString:@"Save Play"])
{
NSLog(@"Save Play was selected.");
[self GetFileName];
}
else if([title isEqualToString:@"Save to Photos"])
{
NSLog(@"Save To Photos was selected.");
//here is where we need to find how to call saveDrawing.
[self saveDrawing];
}
else if([title isEqualToString:@"Ok"])
{
NSLog(@"OK selected");
UITextField *fName= [alertView textFieldAtIndex:0];
NSString *NameFile = fName.text;
[self savePlay:NameFile];
}
}
-(void)savePlay:(NSMutableString *)fileName{
//code here to save via archive.
NSArray *pathforsave = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirectory = [pathforsave objectAtIndex:0];
//here we need to add the file extension onto the file name before we add the name to the path
[fileName appendString:@".hmat"];
NSString *strFile = [documentDirectory stringByAppendingPathComponent:fileName];
[NSKeyedArchiver archiveRootObject:matView.drawables toFile:strFile];
}
我一直在尝试使用下面的代码来处理这个问题,但是当第一个 UIAlertView 触发时(这是要求选择一个播放 - 不存在文本字段) - 下面的函数运行并崩溃应用程序,因为没有第一个警报视图中的文本字段。
- (BOOL)alertViewShouldEnableFirstOtherButton:(UIAlertView *)alertView
{
NSString *inputText = [[alertView textFieldAtIndex:0] text];
if( [inputText length] >= 1 )
{
return YES;
}
else
{
return NO;
}
}
当第一个警报触发时,alertViewShouldEnableFirstOtherButton 被击中,然后我的应用程序在模拟器中崩溃。有谁知道为什么会发生这种情况?有两件事我不太确定
一 - 为什么在第二个警报视图上命名播放的 Ok 按钮的句柄在处理其他按钮的同一块中处理。由于它是一个单独的警报视图,它不应该在它自己的块中吗?
二 - 为什么 alertViewShouldEnableFirstOtherButton 在尚未到达第二个警报视图时被点击,它被调用并与第一个警报视图一起运行,这会使应用程序崩溃。
感谢您的帮助,我是目标 C 的新手。