代码之家  ›  专栏  ›  技术社区  ›  pix0r

自定义uiswitch和应用商店审批

  •  49
  • pix0r  · 技术社区  · 15 年前

    在阅读了一些内容之后,我发现您可以自定义uiswitch控件上的文本和颜色。我很好奇这些方法是否会在尝试让我的应用获得批准并包含在应用商店中时造成问题。

    样本代码取自 iPhone Developer's Cookbook Sample Code :

    // Custom font, color
    switchView = [[UICustomSwitch alloc] initWithFrame:CGRectZero];
    [switchView setCenter:CGPointMake(160.0f,260.0f)];
    [switchView setLeftLabelText: @"Foo"];
    [switchView setRightLabelText: @"Bar"];
    [[switchView rightLabel] setFont:[UIFont fontWithName:@"Georgia" size:16.0f]];
    [[switchView leftLabel] setFont:[UIFont fontWithName:@"Georgia" size:16.0f]];
    [[switchView leftLabel] setTextColor:[UIColor yellowColor]]; 
    
    7 回复  |  直到 11 年前
        1
  •  40
  •   zpesk    15 年前

    这不会造成提交到应用商店时出现问题。只要不使用任何私有(未记录的)API来构建/更改这些小部件,就允许使用自定义控件或更改的内置控件版本。

        2
  •  16
  •   Robert Chin    14 年前

    您可能会喜欢我的自定义交换机实现(开源和免费使用)…它允许将开关设置为显示任何文本,或轻松地将其子类化以在轨迹中绘制您自己的自定义图像。 http://osiris.laya.com/projects/rcswitch/

    此开关使绘制图像(而不是文本)变得容易:对主开关类进行子类化并重写这样的绘制方法,您的图像将自动设置动画:

    - (void)drawUnderlayersInRect:(CGRect)aRect withOffset:(float)offset inTrackWidth:(float)trackWidth
    {
        [onImage drawAtPoint:CGPointMake(floorf(aRect.origin.x + 13 + (offset - trackWidth)), floorf((self.bounds.size.height - onImage.size.height) / 2.0))];
        [offImage drawAtPoint:CGPointMake(floorf(aRect.origin.x + 15.0 + (offset + trackWidth)), ceilf((self.bounds.size.height - offImage.size.height) / 2.0))];
    }
    
        3
  •  1
  •   eiran    11 年前

    我刚刚创建了这个视图,看到了你的问题

    希望这有帮助

    h文件:

    #import <UIKit/UIKit.h>
    
    @interface EDSwitch : UIView
    {
        UIButton* onButton,*offButton;
        UIImageView* bg;
    }
    
    - (id)initWithText:(NSString*)on andText:(NSString*)off andDelegate:(id)delegate andOnSelector:(SEL)onSelector andOffSelector:(SEL)offSelector andBackgroundImage:(UIImage*)bgImage andStartingValue:(BOOL)b;
    
    @end
    

    和.m文件:

    #import "EDSwitch.h"
    
    @implementation EDSwitch
    
    - (id)initWithText:(NSString*)on andText:(NSString*)off andDelegate:(id)delegate     andOnSelector:(SEL)onSelector andOffSelector:(SEL)offSelector andBackgroundImage:     (UIImage*)bgImage andStartingValue:(BOOL)b
    {
    self = [super initWithFrame:CGRectZero];
    if (self) {
        UILabel* onLabel = [[UILabel alloc] initWithFrame:CGRectMake(2, 8, 50, 20)];
        onLabel.text = on ;
        onLabel.tag = 1;
        onLabel.font = [UIFont fontWithName:kCalibri size:15];
        onLabel.textAlignment = UITextAlignmentCenter;
        onLabel.textColor = [UIColor colorFromHexString:@"#009dd0"];
        onLabel.backgroundColor = [UIColor clearColor];
        [onLabel sizeToFit];
        [onLabel setWidth:onLabel.frame.size.width + 4];
    
    
        UILabel* offLabel = [[UILabel alloc] initWithFrame:CGRectMake(2, 8, 50, 20)];
        offLabel.text = off ;
        offLabel.tag = 1;
        offLabel.textAlignment = UITextAlignmentCenter;
        offLabel.font = [UIFont fontWithName:kCalibri size:15];
        offLabel.textColor = [UIColor colorFromHexString:@"#009dd0"];
        offLabel.backgroundColor = [UIColor clearColor];
        [offLabel sizeToFit];
        [offLabel setWidth:offLabel.frame.size.width + 4];
    
        float high = MAX([offLabel.text sizeWithFont:offLabel.font].width,[onLabel.text sizeWithFont:onLabel.font].width) + 10;
    
        onButton = [UIButton buttonWithType:UIButtonTypeCustom];
        [onButton addTarget:self action:@selector(toggled:) forControlEvents:UIControlEventTouchUpInside];
        [onButton addTarget:delegate action:onSelector forControlEvents:UIControlEventTouchUpInside];
        offButton = [UIButton buttonWithType:UIButtonTypeCustom];
        [offButton addTarget:self action:@selector(toggled:) forControlEvents:UIControlEventTouchUpInside];
        [offButton addTarget:delegate action:offSelector forControlEvents:UIControlEventTouchUpInside];
    
        [onButton setWidth:high];
        [onButton setX:0];
        [onButton addSubview:onLabel];
        [onLabel setWidth:high];
        [onLabel setX:0];
    
        [offButton setWidth:high];
        [offButton addSubview:offLabel];
        [offButton setX:high];
        [offLabel setWidth:high];
        [offLabel setX:0];
    
        bg = [[UIImageView alloc] initWithImage:bgImage];
    
        self.frame = CGRectMake(200, 200 , (high*2), 34);
        self.layer.borderColor = [[[UIColor colorFromHexString:@"#009dd0"] colorWithAlphaComponent:0.5] CGColor];
        self.layer.borderWidth = 0.5;
        self.layer.cornerRadius = 5;
        [self setX:[UIApplication sharedApplication].keyWindow.frame.size.width - self.frame.size.width - 8];
    
        [self addSubview:bg];
    
        [bg setWidth:[self getWidth]];
        [bg setHeight:[self getHeight]];
    
        [self addSubview:onButton];
        [self addSubview:offButton];
    
        [onButton setHeight:[self getHeight]];
        [offButton setHeight:[self getHeight]];
    
        if(b){
            [onButton setBackgroundColor:[UIColor clearColor]];
            [offButton setBackgroundColor:[UIColor whiteColor]];
        }
        else{
            [onButton setBackgroundColor:[UIColor whiteColor]];
            [offButton setBackgroundColor:[UIColor clearColor]];
        }
    }
    return self;
    }
    
    -(void)toggled:(UIButton*)sender{
    if(sender == onButton){
        UILabel* l = (UILabel*)[onButton viewWithTag:1];
        l.textColor = [UIColor grayColor];
        [onButton setBackgroundColor:[UIColor clearColor]];
        l = (UILabel*)[offButton viewWithTag:1];
        l.textColor = [UIColor colorFromHexString:@"#009dd0"];
        [offButton setBackgroundColor:[UIColor whiteColor]];
    
    }
    else{
        UILabel* l = (UILabel*)[offButton viewWithTag:1];
        l.textColor = [UIColor grayColor];
        [offButton setBackgroundColor:[UIColor clearColor]];
        l = (UILabel*)[onButton viewWithTag:1];
        l.textColor = [UIColor colorFromHexString:@"#009dd0"];
        [onButton setBackgroundColor:[UIColor whiteColor]];
    }
    }
    
    @end
    

    用途:

        [[UIApplication sharedApplication].keyWindow addSubview:[[EDSwitch alloc] initWithText:@"aksdjaksdjh" andText:@"dasjdsaj" andDelegate:self andOnSelector:@selector(logon) andOffSelector:@selector(logoff) andBackgroundImage:[UIImage imageNamed:@"toggleBottom.png"] andStartingValue:YES]];
    

    长命百岁,

    艾兰

        4
  •  0
  •   Nic Rodgers    13 年前

    在Apple人机界面指南中,在交换机文档中,Apple声明:

    使用表行中的开关为用户提供两个简单的、完全相同的 决定事物状态的相反选择,如是/否 或者开/关。使用可预测的一对值,这样用户就不会 滑动控件以发现另一个值是什么。

    所以,是的,只要使用一对可预测的值(如是/否),就可以更改文本。

        5
  •  0
  •   infiniteLoop    12 年前

    根本不需要uiswitch子类。 我实现的一个相当简单的解决方案是uiview和on-touch事件的子类,在两个图像之间切换(开/关),包括幻灯片转换。

    当做 达纳什

        6
  •  -1
  •   Tim Post Samir J M Araujo    12 年前

    来自苹果文档:

    使用uiswitch类创建和管理 例如,请参见以下服务的首选项(设置) 飞机模式。这些对象称为开关。

    uiswitch类声明一个属性和一个方法来控制其 开/关状态。和uislider一样,当用户操作开关时 控件(翻转)生成uicontrolEventValueChanged事件, 这会导致控件(如果正确配置)发送 动作消息

    uiswitch类不可自定义。

    苹果公司说他们不可定制,这可能意味着你的应用被拒绝。

        7
  •  -30
  •   Shane    15 年前

    这将导致应用程序审批出现问题。问我怎么知道:P

    我今天刚收到苹果公司的一封难听的信。我们正在寻找替代方案。