1

这是原始布局: AUIBarButtonItem在 a 中显示自定义视图UIToolbar

+-- main view --------------+
|                           |
|                           |
| +-- toolbar ------------+ |
| | +-- custom view ----+ | |
| | |                   | | |
| | +-------------------+ | |
| +-----------------------+ |
+---------------------------+

这是我这样做的方法:

UIBarButtonItem* button = [[[UIBarButtonItem alloc] initWithCustomView:self.customView] autorelease];
NSArray* items =  [NSArray arrayWithObject:button];
self.toolbar.items = items;

经过一些用户交互后,我想从工具栏中删除自定义视图并将其显示在其他位置,在本示例中直接作为主视图的子视图:

+-- main view --------------+
|                           |
| +-- custom view ----+     |
| |                   |     |
| +-------------------+     |
|                           |
| +-- toolbar ------------+ |
| |                       | |
| +-----------------------+ |
+---------------------------+

我正在尝试这样做(self是视图控制器):

self.toolbar.items = [NSArray array];
CGRect frame = self.customView.frame;
frame.origin.x = 10;
frame.origin.y = 10;
self.customView.frame = frame;
[self.view addSubview:self.customView];

这不起作用。由于某种原因,自定义视图在我将其移至其新的超级视图后未显示。我一定在这里做错了什么,但我不知道它是什么。有什么提示吗?

4

1 回答 1

1

如果您从未解决此问题,或者其他人遇到同样的问题,我想我发现了问题所在。

我将 Xamarin iOS 与 C# 一起使用,但问题似乎是相同的:将自定义 UIView 添加到 UIBarButtonItem.CustomView 后,无法通过将 UIView 添加到另一个 UIView 或 UIBarButtonItem 来重用它。

我为解决这个问题所做的设置是:

button.CustomView = null;
button = null;

我想Objective C等价物是这样的:

button.customView = null;
button = null;

然后我终于能够使用 AddSubview() 将我的 CustomView 添加到另一个 UIView。

似乎一旦您使用 CustomView 创建了 UIBarButtonItem,CustomView 就会绑定到该 UIBarButtonItem 实例。因此,将 UIBarButtonItem 实例保存在类变量中很重要,这样您就不会丢失对它的引用。

无论如何,这就是它在我的 Xamarin/C# 环境中的工作方式。希望它可以帮助别人。

于 2013-11-06T11:20:00.437 回答