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

Posted

技术标签:

【中文标题】如何在 Rider 中设置 Xamarin.ios 视图的属性? (如何更新自动生成的 View.designer.cs?)【英文标题】:How to set property for Xamarin.ios view in Rider? (How to update autogenerated View.designer.cs?) 【发布时间】:2019-11-28 18:14:41 【问题描述】:

如果我使用 Visual Studio for Mac,它在设计器中有此字段。

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

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

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

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

编辑:据我所知,它似乎在编辑 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 将 name 属性添加到 Visual Studio for 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 一样好用,这是我使用他们的唯一其他产品。

【问题讨论】:

【参考方案1】:

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

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

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

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

    Ctrl+单击要绑定的控件并将其拖入代码中。 重要提示:使用 .h 文件创建新的动作和出口,Rider 分析 .h 文件以构建公共 API 模型。

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

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

    使用特定设置和配置在obj\xcode 文件夹中创建相应的xcodeproj(pbxproj 和朋友)项目。 复制视图、plist 文件、图像等所有内容。 查找所有ViewController 类型。 Rider 为它们中的每一个生成带有动作和出口的 objc 类。 打开 xcode 和生成的项目。

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

    将所有更改的内容文件复制回 .NET 项目 更新设置 解析 objc 文件并为视图控制器重新生成 *.designer.cs 文件。对于所有这些文件,您将看到这个生成的标题(将来可以更改):
// 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 开发人员提供良好的体验,甚至比 VS for Mac 更好。因此,我们正在努力支持一些 Xamarin 部件(2020.1 中的 Xamarin Forms Hot Reload),因此请随时在我们的公共问题跟踪器中分享您的问题:

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

【讨论】:

非常感谢。我永远不会想出 .h 文件,因为它会默认提取 .m 。这很完美,让我可以使用 MvvmCross。 也许我们必须稍微重写一下引擎并解析 .m 文件...随时与我们分享任何反馈 =) 在第 1 步中,对我来说,不清楚从哪里获得该弹出窗口。它是编辑器右上角的行,有点像 word 中的左对齐图标。 每个版本的 xcode 都不同 =( 你必须谷歌你的版本。通常它在 many lines with different length 图标下

以上是关于如何在 Rider 中设置 Xamarin.ios 视图的属性? (如何更新自动生成的 View.designer.cs?)的主要内容,如果未能解决你的问题,请参考以下文章

Rider IDE 无法在 iPhone 设备上运行项目 Xamarin.iOS

Rider Xamarin iOS 错误“部署后未生成应用程序包”

Jetbrains Rider、Xamarin IOS 在钥匙串中找不到有效的 iOS 代码签名密钥

在 Rider IDE 中设置 Android Xamarin 解决方案未检测到框架

Xamarin.IOS(使用 Rider):每次加载 XCode 或运行模拟器时,创建的图像集都会消失

Xamarin iOS 模拟器无法连接到 Rest API