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;
        }
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?