• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

c# - 从另一个 ViewController 接收后的初始化数据

[复制链接]
菜鸟教程小白 发表于 2022-12-13 13:17:48 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我有两个 ViewController 类。

首先 - HarachieRolliController。 第二 - DetailTovarProsmotr

我在 Xamarin iOS (C#) 的 MainStoryboard 文件中创建了它

这里截图enter image description here

点击 button_arrow_product002 后:

1) 需要打开DetailTovarProsmotr 2) 需要将数据传给DetailTovarProsmotr,并显示在某些字段中,例如(titleproduct001),这是字符串。

头等舱代码:

    partial class HarachieRolliController : UIViewController
{

    public HarachieRolliController (IntPtr handle) : base (handle)
    {
    }
    public async override void ViewDidLoad ()
    {

        base.ViewDidLoad ();
        // Perform any additional setup after loading the view, typically from a nib.

        string url2 = "http://papajohn.pp.ua/?mkapi=getProductsByCat&cat_id=83";
        JsonValue json = await FetchAsync(url2);

    ParseAndDisplay (json);
    }

    private async void ParseAndDisplay(JsonValue json)
    {

        String title = json[1]["post_title"].ToString();
        button_arrow_product002.TouchUpInside += delegate {

            Console.Out.WriteLine ("Clicked Button (button_arrow_product002)");
            DetailTovarProsmotr myvarible = new DetailTovarProsmotr (title);

        };
    }
}
}

二等代号:

    public partial class DetailTovarProsmotr : UIViewController
{
    public string mytitle;

    public DetailTovarProsmotr (IntPtr handle) : base (handle)
    {

    }
    public DetailTovarProsmotr(String title){
        this.mytitle = title;
        Console.Out.WriteLine ("Constructor DetailTovarProsmotr is run");
        Console.Out.WriteLine (mytitle+" Console.Out.WriteLine (mytitle)");
        HendlerButtonClicked (mytitle);

    }

    public override void ViewDidLoad ()
    {
        base.ViewDidLoad ();
        Console.Out.WriteLine (mytitle+" ViewDidLoad metod is run");

    }

    public void HendlerButtonClicked(String title){
        Console.Out.WriteLine (title+" HendlerButtonClicked metod is run");
        titleproduct001.Text = title;

    }
}

在类和方法中,我有控制台显示,以查看在我的应用程序中工作的阶段。控制台日志:

  1. ViewDidLoad 方法已运行

  2. 点击的按钮 (button_arrow_product002)

  3. 运行构造函数 DetailTovarProsmotr

  4. "Горячий ролл с лососем и угрем"Console.Out.WriteLine (mytitle)

  5. "Горячий ролл с лососем и угрем "HendlerButtonClicked 方法已运行

我认为数据通过之后 ViewController 开始工作。因为这个titleproduct001.Text = title;不起作用。结果我有警告。 enter image description here 哇,我可以解决这个问题吗?



Best Answer-推荐答案


我想我不妨将此作为答案与代码一起发布以供引用。

问题在于您没有正确使用 Storyboard 。 UIViewController 实例之间的转换需要通过 segues 发生。

现在您可能想知道...如何将标题字符串传递给 DetailTovarPostr?使用 Storyboard 时,不能使用构造函数参数来传递数据,但可以使用 segue!

UIViewController 有一个 PrepareForSegue 方法,可以完全按照您的意愿行事。

  partial class HarachieRolliController : UIViewController
  {

    public HarachieRolliController (IntPtr handle) : base (handle)
    {
    }
    public async override void ViewDidLoad ()
    {

        base.ViewDidLoad ();
        // Perform any additional setup after loading the view, typically from a nib.

        string url2 = "http://papajohn.pp.ua/?mkapi=getProductsByCat&cat_id=83";
        JsonValue json = await FetchAsync(url2);

        ParseAndDisplay (json);
    }

    private async void ParseAndDisplay(JsonValue json)
    {

        String title = json[1]["post_title"].ToString();
        button_arrow_product002.TouchUpInside += delegate {

            Console.Out.WriteLine ("Clicked Button (button_arrow_product002)");
            // Use a segue to display the DetailTovarProsmotr
            this.PerformSegue('YOUR SEGUE ID', this);
            // The segue needs to be defined in the storyboard with a unique id

        };
    }

    protected override void PrepareForSegue(UIStoryboardSegue segue, NSObject sender) {
        var detailTovarPostr = segue.DestinationViewController as DetailTovarPostr;
        // Initialized your custom view controller however you like
       // Consider defining properties or an initialize method and pass in the title and other data
       // TODO pass data 
    }
}

一旦你使用 segue,iOS 将实例化 UIViewController(调用 new)并用它的所有 View 初始化它(如 titleproduct001)。该 View 为 NULL,因为 UIViewController 未正确初始化。

你说你已经在 View Controller 之间定义了一个 segue。如果您需要获取/设置 ID 的帮助,请告诉我,我也会发布。

关于c# - 从另一个 ViewController 接收后的初始化数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34633235/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap