【问题标题】:UISegmentedControl with Direction or Arrow theme带有方向或箭头主题的 UISegmentedControl
【发布时间】:2013-01-28 13:33:17
【问题描述】:

我使用 cocoacontrols.comBASequenceControl 实现了带有 Direction 主题的 UISegmentedControl

我添加了 BASequenceControl.hBASequenceControl.m 类以及来自 GitHub

的所需图像

太好了。它对我来说工作得很好..但是我对最后一段提示有疑虑。

它显示最后一段的垃圾空间。

原始屏幕截图

我需要这样的

我实现的代码

        #import "BASequenceControl.h"

BASequenceControl *bASequenceControl = [[BASequenceControl alloc] init];                                    
bASequenceControl.frame = CGRectMake(10, 10, 200, 44);
[bASequenceControl addSegmentWithTitle:@"First" animated:NO];
[bASequenceControl addSegmentWithTitle:@"Second" animated:NO];

bASequenceControl.leftMargin = -22;
bASequenceControl.rightMargin = 0;
bASequenceControl.overlapWidth = 22;

[self.view addSubview:bASequenceControl];

对此的任何帮助表示赞赏。

谢谢。

【问题讨论】:

    标签: iphone ios objective-c uisegmentedcontrol uicontrol


    【解决方案1】:

    这是一个非常简单的修复。您必须编辑 BASequenceControl.m 文件,或者您可以复制该类并重命名它。

    导致问题的行在drawRect: 中,它基本上在控件的整个背景上绘制了灰色箭头。在空白处创建漂亮的渐变。

    [passiveSegmentImage drawInRect:CGRectMake(-passiveSegmentImage.size.width, 0,
                                               w + 2 * passiveSegmentImage.size.width, h)];
    

    你可以改成:

    [passiveSegmentImage drawInRect:CGRectMake(0, 0,
                                               w, h)];
    

    现在你必须告诉控件它不应该是不透明的。像这样更新初始化程序。

    - (void)awakeFromNib {
        _selectedSegmentIndex = -1;
        [self setOpaque:NO];
        [super awakeFromNib];
    }
    
    - (id)init {
        if ((self = [super init])) {
            [self setOpaque:NO];
            _selectedSegmentIndex = -1;
        }
        return self;
    }
    

    这非常快速和肮脏,您可以使用属性使其可设置。然后向 BaseAppKit 提交一个拉取请求,但我会把它留给你。这是一个要点,您可以直接在 BASequenceControl.m 中复制和粘贴以修复悬垂。 https://gist.github.com/4632686

    编辑:确保您使用init 作为初始化器,然后使用setFrame:(我不太确定为什么initWithFrame: 没有在类中被覆盖。)

    BASequenceControl *control = [[BASequenceControl alloc] init];
    [control setFrame:CGRectMake(0, 0, 300, 40)];
    

    具有戏剧效果的绿色背景

    【讨论】:

    • 非常感谢您的出色修复。修复后,它显示黑色(之前是灰色)。那么有什么方法可以将空白空间(在最后一段之后)设为白色?如果是,那么只有它看起来像一个箭头。因为我的视图背景颜色是白色的。
    • 是的,请参阅有关 init 的编辑。它应该是完全透明的,我已经测试过了,它看起来不错。
    【解决方案2】:

    如何使用这样的面具:

    掩盖您的 SegmentedControl

    【讨论】:

    • 感谢您的回答。你能详细解释一下吗?
    猜你喜欢
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    相关资源
    最近更新 更多