vikeyToy 2013-06-20 06:53 采纳率: 0%
浏览 991

从xib到storyboard的封装性问题

用xib可以调用不同的初始化块。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // Fetch Note...
    // Initialize Edit Note View Controller with the fetched Note
    EditNoteViewController *vc = [[EditNoteViewController alloc] initWithNote:note];

    // Push View Controller onto Navigation Stack
    [self.navigationController pushViewController:vc animated:YES];
}

这样我就可以保持变量(在EditNoteViewController中)私有化,而且可以设置变量的默认值。比如:

- (id)initWithNote:(Note *)note {
    // ....
    if (self) {
        self.note = note;
        self.isEditing = YES;
    }
    return self;
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    //...
    if (self) {
        self.isEditing = NO;
    }
    return self;
}

现在要用storyboard,有两个问题:

1.在prepareForSegue设置变量,怎么不暴露变量或其他实现?
2.能设置默认值吗?

谢谢您的解答。

  • 写回答

1条回答

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2022-12-31 22:17
    关注

    在使用 Storyboard 时,可以通过在目标视图控制器中定义属性并使用 prepareForSegue 方法来设置变量,而不会暴露这些变量或其他实现。


    例如,假设您有一个 Storyboard 中的视图控制器,其中包含一个名为 "note" 的属性,该属性代表要编辑的笔记。您可以在 prepareForSegue 方法中将笔记赋值给该属性,如下所示:

    (void) prepareForSegue: (UIStoryboardSegue * ) segue sender: (id) sender
    {
        if([segue.identifier isEqualToString: @"editNote"])
        {
            EditNoteViewController * vc = segue.destinationViewController;
            vc.note = self.selectedNote;
        }
    }
    

    在这种情况下,selectedNote 是你在源视图控制器中的属性,而 note 是目标视图控制器中的属性。您可以在目标视图控制器中设置其他默认值,如下所示:

    (void) viewDidLoad
    {
        [super viewDidLoad];
        if(!self.note)
        {
            self.note = [
                [Note alloc] init
            ];
            self.isEditing = NO;
        }
        else
        {
            self.isEditing = YES;
        }
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 矩阵加法的规则是两个矩阵中对应位置的数的绝对值进行加和
  • ¥15 活动选择题。最多可以参加几个项目?
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀