Пользовательское одобрение UISwitch & App Store - PullRequest
49 голосов
/ 29 марта 2009

После некоторого чтения я обнаружил, что вы можете настроить текст и цвет в элементе управления UISwitch. Мне любопытно, будут ли эти методы вызывать проблемы при попытке одобрить мое приложение и включить его в App Store.

Образец кода взят из Образец кода поваренной книги iPhone для разработчиков :

// 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 ]

40 голосов
/ 29 марта 2009

это не создаст проблем с отправкой в ​​магазин приложений. Вам разрешено использовать пользовательские элементы управления или измененные версии встроенных элементов управления, если вы не используете какие-либо частные (недокументированные) API для создания / изменения этих виджетов.

16 голосов
/ 30 апреля 2010

Возможно, вам понравится моя реализация пользовательского переключателя (с открытым исходным кодом и бесплатная для использования) ... он позволяет настроить переключатель для отображения любого текста или легко создать подкласс для рисования собственных пользовательских изображений в дорожке .... 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))];
}
1 голос
/ 17 марта 2013

Я только что создал это представление и увидел ваш вопрос

надеюсь, это поможет

.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]];

живи долго и процветай,

eiran

1 голос
/ 08 мая 2012

Нет необходимости UISwitch подкласс вообще. Довольно простое решение, которое я реализовал, - это подпункт UIView и событие касания, переключающееся между двумя изображениями (ВКЛ / ВЫКЛ) с переключением слайдов, вот и все.

С уважением Dhanesh

0 голосов
/ 13 октября 2011

В руководстве Apple Human Interface Guidelines в документации по коммутатору Apple указано:

Используйте переключатель в строке таблицы, чтобы дать пользователям два простых, диаметрально противоположный выбор, который определяет состояние чего-либо, например, да / нет или вкл / выкл. Используйте предсказуемую пару значений, чтобы пользователи не имели сдвиньте элемент управления, чтобы узнать, что является другим значением.

Так что, да, это нормально, чтобы изменить текст, если вы используете предсказуемую пару значений (например, да / нет).

0 голосов
/ 18 сентября 2011

Из документации Apple: -

Вы используете класс UISwitch для создания и управления кнопками включения / выключения, которые вы см., например, в настройках (настройках) таких сервисов, как Режим полета. Эти объекты известны как переключатели.

Класс UISwitch объявляет свойство и метод для управления его состояние вкл / выкл. Как и в UISlider, когда пользователь манипулирует переключателем элемент управления («переворачивает» его), генерируется событие UIControlEventValueChanged, в результате чего элемент управления (если он правильно настроен) отправляет сообщение о действии.

Класс UISwitch не настраивается.

Apple говорит, что они не настраиваются, что может означать отклонение вашего приложения.

0 голосов
/ 21 мая 2009

Это вызовет проблемы с одобрением вашего приложения. спроси меня откуда я знаю: P

Я только что получил неприятную записку сегодня от Apple. Мы находимся в процессе поиска альтернативы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...