在MonoTouch MonoDevelop中重命名控制器类

4
什么是重命名继承自UIViewController并连接到storyboard的designer.cs类的最佳方法?
我首先尝试在MonoDevelop中重命名.cs文件。这个方法有效,但是designer.cs文件和类名称都没有被重命名。
然后我重命名了类名。这成功地更改了.cs和.designer.cs文件中的类名,但仍未更改.designer.cs文件名。它也没有更改Xcode控制器中“自定义类”的名称。
因此,在XCode中,我更改了自定义类的名称并保存,然后切换回MonoDevelop,可惜它创建了一个与已重命名文件相同名称的新.cs文件,并将新的.designer.cs文件放在原始(已重命名).cs文件下面,旁边是旧的(未重命名)a.designer.cs文件!
有人可以告诉我应该采取哪些步骤的顺序吗?

我一直都需要在Finder中手动重命名*.designer.cs文件,然后打开*.csproj文件并在文本编辑器中手动编辑它。虽然我没有确切的步骤,但希望Xamarin的其中一位工程师能为我们提供指导。 - jonathanpeppers
4个回答

3
重命名文件有些棘手,因为MD不支持重命名分组的文件。您需要手动编辑csproj,或从项目中删除文件,在Finder中重命名,然后再添加回来。
重命名类有点容易,但关键是要理解类实际上有两个名称-.NET名称和Obj-C名称。重命名.NET名称应该很容易,您可以简单地使用MD中的重命名命令。
Obj-C名称应用于[Register(“SomeName”)]属性上的类,并且是在xibs和Xcode中使用的名称。但是,请注意,MonoDevelop将尝试创建任何它认为是在Xcode中创建的类的.NET对应项。这意味着您应该先在MonoDevelop中更改Obj-C名称,然后切换到Xcode并更改自定义类。

1

你需要进入.csproj文件并添加一个标签,例如:

   <Compile Include="MainWindow.cs" />
    <Compile Include="MainWindow.designer.cs">
      <DependentUpon>MainWindow.cs</DependentUpon>
    </Compile>

这将显示MonoDevelop项目窗口中文件之间的正确关系。

顺便说一下,我的经验是,这种依赖关系纯粹是为了方便。将新的designer.cs文件添加到解决方案中,代码就可以编译得很好:依赖关系似乎是一种文档。

另外:要删除或重命名这些依赖文件,您不能在MonoDevelop项目窗格中执行此操作:您必须转到Finder(如果您在OSX中)或Explorer(如果您在Windows中),并在那里处理文件以重命名或以其他方式操纵它们,然后手动修复MonoDevelop csproj文件。好消息是,这并不难,当您这样做时,它可以正常工作,并且您可以获得有关如何将项目编织在一起的深入理解。


0

我尝试了上面所有的解决方案,但都没有起作用。最后,我只是使用了“在文件中替换”功能来查找整个解决方案。之后,我在项目中进行了“重建”,然后就可以正常工作了。


0

很多人也得考虑版本控制系统。这是我用的方法:

  1. 退出MonoDevelop
  2. 在版本控制系统中,重命名文件
  3. 在文本编辑器中打开csproj文件-搜索&替换
  4. 打开MonoDevelop
  5. 打开XxxViewController.cs - 搜索&替换
  6. 打开XxxViewController.designer.cs - 搜索&替换
  7. 打开XxxViewController.xib - 搜索&替换

你可能会想在第5步使用Refactor/Rename来代替搜索和替换,但是由于某些原因,这会导致MonoDevelop将XxxViewController.designer.cs重命名为XxxViewController_1.cs。

另外,你可能会想在版本控制系统中重命名文件之前将它们从项目中删除,然后再将它们添加回到你的项目中(这样你就不必手动编辑csproj文件了)。这个方法也行得通,但是“DependentUpon”部分将会从csproj文件中消失,这将导致设计者文件不在其对应文件下方。问题不大,但在解决方案资源管理器中看起来不太好看。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接