如何在 Rider 中为 Xamarin.ios 视图设置 属性? (如何更新自动生成的View.designer.cs?)

How to set property for Xamarin.ios view in Rider? (How to update autogenerated View.designer.cs?)

如果我使用 Visual Studio 作为 Mac 它在设计器中有这个字段。

它在 View.cs 文件中创建了一个 属性 允许我绑定到它。

我在 xcode 中找到了一个类似的部分(这就是骑手打开的部分),它只有这些选项。没有名称字段。

此名称字段不是显示在按钮标签上的内容。我知道怎么设置了。

对于 mac,我宁愿使用 Rider 而不是 Visual Studio。如果我必须不断地来回跳动,这显然是个问题。

编辑:据我所知,它似乎编辑了 View.designer.cs。

虽然有这个评论。我如何才能从 Rider 编辑它?

// WARNING
//
// This file has been generated automatically by Visual Studio from the 
outlets and
// actions declared in your storyboard file.
// Manual changes to this file will not be maintained.
//

这是新 MvvmCross 项目默认的样子

using Foundation;
using System;
using System.CodeDom.Compiler;

namespace HelloCrossPlatform.iOS.Views
{
[Register ("FirstView")]
partial class FirstView
{
    [Outlet]
    [GeneratedCode ("iOS Designer", "1.0")]
    UIKit.UILabel Label { get; set; }

    [Outlet]
    [GeneratedCode ("iOS Designer", "1.0")]
    UIKit.UITextField TextField { get; set; }

    void ReleaseDesignerOutlets ()
    {
        if (Label != null) {
            Label.Dispose ();
            Label = null;
        }

        if (TextField != null) {
            TextField.Dispose ();
            TextField = null;
        }
    }
}
}

这是我使用 Designer

将名称 属性 添加到 Visual Studio 中的 Mac 按钮时的样子
using Foundation;
using System;
using System.CodeDom.Compiler;

namespace HelloCrossPlatform.iOS.Views
{
[Register ("FirstView")]
partial class FirstView
{
    [Outlet]
    [GeneratedCode ("iOS Designer", "1.0")]
    UIKit.UILabel Label { get; set; }

    [Outlet]
    [GeneratedCode ("iOS Designer", "1.0")]
    UIKit.UIButton SayHelloButton { get; set; }

    [Outlet]
    [GeneratedCode ("iOS Designer", "1.0")]
    UIKit.UITextField TextField { get; set; }

    [Action ("UIButtonDZD114An_TouchUpInside:")]
    [GeneratedCode ("iOS Designer", "1.0")]
    partial void UIButtonDZD114An_TouchUpInside (UIKit.UIButton 
sender);

    void ReleaseDesignerOutlets ()
    {
        if (Label != null) {
            Label.Dispose ();
            Label = null;
        }

        if (SayHelloButton != null) {
            SayHelloButton.Dispose ();
            SayHelloButton = null;
        }

        if (TextField != null) {
            TextField.Dispose ();
            TextField = null;
        }
    }
}
}

rider 甚至是与 Xamarin 一起使用的好工具吗?我很失望他们甚至将它作为一种选择进行销售。真的质疑我对 JetBrains 的订阅。Vscode 似乎和 Webstorm 一样好用,这是我使用他们的唯一其他产品。

Rider 没有针对 .xib.storyboard UI 文件的特殊设计器。我们(Rider 团队)认为我们将无法实现像本地 xcode 那样好的(和实际的)UI 设计器。因此,在 Rider 中使用 Xamarin macios UI 的主要场景 - 使用 xcode 界面构建器。

你可以查看有关 outlets 生成的 apple 文档: https://developer.apple.com/library/archive/documentation/ToolsLanguages/Conceptual/Xcode_Overview/ConnectingObjectstoCode.html

这是在 xcode 11 中使用默认设置的简要说明。

  1. 将 UI 编辑器拆分为设计器和源代码部分

  2. Ctrl+点击要绑定的控件,将其拖入代码中。 重要说明:使用 .h 文件创建新的动作和出口,Rider 分析 .h 文件以构建 public API 模型。

  3. 现在您可以输入将创建绑定的控件的名称。您将在 objc 代码中看到相应的出口。

也许不是那么简单,所以我将尝试解释它的内部工作原理。 Xamarin macios 项目是一个(几乎)常规的 .NET C# 项目。因此,为了允许您在 xcode 中编辑 UI,Rider(实际上是 VS)做了一些魔术。它需要 .NET 项目和:

  1. 在具有特定设置和配置的 obj\xcode 文件夹中创建相应的 xcodeproj(pbxproj 和朋友)项目。
  2. 复制所有内容,如视图、plist 文件、图像等。
  3. 寻找所有 ViewController 类型。对于它们中的每一个,Rider 都会生成带有动作和出口的 objc class。
  4. 打开xcode并将生成的项目导入。

当您对该生成的项目进行一些更改并返回到 Rider 时,它会尝试应用所有更改:

  1. 将所有更改的内容文件复制回 .NET 项目
  2. 更新设置
  3. 解析 objc 文件并为视图控制器重新生成 *.designer.cs 文件。对于所有这些文件,您将看到生成的 header(将来可以更改):
// WARNING
//
// This file has been generated automatically by Rider IDE
//   to store outlets and actions made in Xcode.
// If it is removed, they will be lost.
// Manual changes to this file may not be handled correctly.
//

要控制 xcode 同步过程并查看发生了什么以及发生了什么错误,您可以使用特殊的 Rider 工具窗口:xcode console。每次打开 xcode:

中的项目时都会显示

而不是结论:Rider 的团队试图为 Xamarin 开发人员提供良好的体验,甚至比 Mac 的 VS 更好。因此,我们正在努力支持一些 Xamarin 部件(2020.1 中的 Xamarin Forms Hot Reload),所以请随时在我们的 public 问题跟踪器中分享您的问题:

https://youtrack.jetbrains.com/issues/RIDER?q=Technology:%20Xamarin%20