添加匹配样式按钮/操作

时间:2014-06-27 15:58:16

标签: objective-c cydia theos

已经有一年多时间寻找答案了,如何将匹配式按钮添加到这些按钮的相同区域/处理程序

  • 我需要重新设计它以匹配
  • 我是否需要手动设置新按钮的位置?

cydia tweak “Safari Download Manager”

的示例

之前:

enter image description here

之后:

enter image description here

您可以看到,为了添加新按钮,当前/旧按钮对齐/位置必须更改为更小的颜色,

  • 我必须手动执行此操作吗?

我对Objective-c没有多少经验,但是要重新塑造我在 HTML 中所说的内容:

例如,那些区域按钮处理程序:

<div id="buttons" class="top-buttons">
  <img src="back.png" >
  <img src="forth.png" >
</div>

对于HTML,如果我想添加与top-buttons类相匹配的相同按钮样式,我需要做的就是在div

中添加一个新标签

这是Objective-C (或theos)的工作方式吗?

请注意,它可以是除按钮之外的任何内容,例如在第二张照片中添加新的手动下载行等等。等等

3 个答案:

答案 0 :(得分:2)

免责声明:这是使用带有iOS 6.1.4的iPhone 5完成的。

如果您从Safari转储标头,您可以找到两个可能有用的类来查看:

BrowserToolbar:
@interface BrowserToolbar : UIToolbar <WebBookmarksClientDelegateProtocol> { id<BrowserPanel> _browserPanel; NSArray *_defaultToolbarItems; SpacedBarButtonItem *_backItem; SpacedBarButtonItem *_forwardItem; SpacedBarButtonItem *_actionItem; SpacedBarButtonItem *_bookmarksItem; SpacedBarButtonItem *_cloudTabsItem; SpacedBarButtonItem *_tabExposeItem; SpacedBarButtonItem *_fullscreenItem; BOOL _showingCloudTabButton; ... } ... - (void)_updateFixedSpacing; - (void)updateButtonsAnimated:(BOOL)animated; ... @end

和SpacedBarButtonItem:
@interface SpacedBarButtonItem : UIBarButtonItem { UIBarButtonItem *_precedingFixedSpace; } @property(readonly, assign, nonatomic) UIBarButtonItem *precedingFixedSpace; @end

使用cycript,您可以看到BrowserToolbars有一个_items ivar,但它是一个不可改变的NSArray。但是,可以将它交换为另一个包含SpacedBarButtonItem原始集合以及自定义集合的数组。

答案 1 :(得分:1)

我不确定你对每个按钮使用相同的样式是什么意思。这些按钮都是图像,这就是它们看起来相似的原因。添加新按钮时,它们的对齐和位置也不会改变。只有URL文本框变小。 iOS没有布局的标记语言,但您仍然可以使用AutoLayout实现相同的效果。

  1. 在UIView中添加您想要的每个按钮。每个应该具有与其右侧的控件相同的尾随空间约束值。
  2. 如果未显示按钮,请设置hidden = true,但您还必须调整其尾随约束的大小,以便其他控件正确切换。
  3. 在按钮容器视图的右侧添加另一个UIView。这个你只想占用所有剩余的空间,所以将这个空间与两端对齐。
  4. 作为第2步的例子:

    self.myBtn.hidden = true;
    self.myBtnConstraint.constant = 0.0f;
    

答案 2 :(得分:1)

在处理导航栏和工具栏时,通常在每个“真实”栏按钮项之间使用灵活空间栏按钮项,以均匀分隔它们。如果您插入另一个按钮项目(以及添加一个灵活空间项目)将自动减少所有灵活空间项目的空间再次具有均匀间距。

如果您是手动执行其他视图层次结构,则需要自己进行数学运算,或使用autolayout实现灵活的宽度。