ios - 基于从特定 TableView 中分离出来执行特定操作(如设置 UIDatePicker 的日期)

标签 ios iphone segue uidatepicker

我有一个看起来很简单的问题。

我有一个 TableView Controller (2 个选项卡式选项卡栏的一部分),由用户点击导航栏中的加号按钮并填写一些信息来填充。这会将用户带到“添加条目” View Controller 。

我有第二个 TableView (选项卡栏的第二个选项卡),它在导航栏中也有一个加号按钮,它也调用添加条目。但是,对于这个 TableView ,我已经填充了一个 textField 和 datePicker 以与其来源的信息相关联。

在 prepareForSegue 中,我正在设置日期和文本字段。这样可行。但是,我不完全确定将代码放置在“添加条目”中的何处,以表示“如果从选项卡 1 调用您,请将所有内容留空,如果从选项卡 2 调用您,则设置日期选择器”。

在 prepareForSegue 中:

if ([segue.identifier isEqualToString:@"Create New Entry From Event"])
{
    AddEntryViewController *addEntryViewController = (addEntryViewController *)segue.destinationViewController;
    [addEntryViewController setSelectedEvent:self.occasion.title];

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"MMMM d, yyyy"];
    NSDate *dateFromString = [[NSDate alloc] init];
    dateFromString = [dateFormatter dateFromString:sectionTitle];
    [addEntryViewController setSelectedDate:dateFromString];
}

setSelectedDate 是:

- (void)setSelectedDate:(NSDate *)selectedDate
{
    _selectedDate = selectedDate;
}

如果我将 viewWillAppear 设置为:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    self.occasionTextField.text = self.selectedEvent;
    [self.datePicker setDate:self.selectedDate animated:YES];
}

从任何其他屏幕调用“添加条目”时我都会崩溃,但这个屏幕当然是不可取的。

因此,我需要一种方法,在从应用程序中的任何位置调用时将所有文本字段和日期选择器保留为空白(无需 self.datePicker 行),并且仅在从特定 TableView 调用时设置 datePicker 。

对此的任何想法都非常棒!

最佳答案

在接口(interface)中像这样定义一个 BOOL。

@property (assign, nonatomic) BOOL fromTabOne;

并添加

@synthesize fromTabOne;

在viewWillAppear中

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    if (!self.fromTabOne) {
      self.occasionTextField.text = self.selectedEvent;
      [self.datePicker setDate:self.selectedDate animated:YES];
    }
}

在 prepareForSegue 中

if ([segue.identifier isEqualToString:@"Create New Entry From Event"])
{
    AddEntryViewController *addEntryViewController = (addEntryViewController *)segue.destinationViewController;
        [addEntryViewController setSelectedEvent:self.occasion.title];

    if (viewOne) { //if you're on first tab
       [addEntryViewController setFromTabOne:YES];
    } else {
       [addEntryViewController setFromTabOne:NO];
       NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
       [dateFormatter setDateFormat:@"MMMM d, yyyy"];
       NSDate *dateFromString = [[NSDate alloc] init];
       dateFromString = [dateFormatter dateFromString:sectionTitle];
       [addEntryViewController setSelectedDate:dateFromString];
    }
}

您在评论中提到的错误可能是由 nil NSDate 或错误的区域设置引起的。设置前做一个零检查。我猜 NSDateFormatter 无法格式化您的字符串。

关于ios - 基于从特定 TableView 中分离出来执行特定操作(如设置 UIDatePicker 的日期),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22344638/

相关文章:

ios - 点击时如何将 subview 置于最前面?

ios - 将 NSCFString 转换为 NSString

ios - 发布与 Apple (Accelerate) 框架链接的 iOS 库的最佳实践

iphone - 将 IOS native 对象传回 unity3d

ios - 如何将图像从 CollectionView 传输/显示到另一个 ViewController

ios - 使用 shouldPerformSegueWithIdentifier 快速取消 segue

ios - 将 CMSampleBuffer 转换为 AVAudioPCMBuffer 以获取实时音频

ios - 清理后,managedObjectContext 为 nil 并导致 fatal error : unexpectedly found nil while unwrapping an optional value

iphone - 如何让 iPhone 或 IPad (iOS 5.x) 正确识别我的证书根授权机构

ios - UICollectionView 的 didSelectItemAt 仅在双击时调用