Субъективный Си / Говнокод #19580 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
+ (UIView *) createTextField:(NSString *)placeholder {
	UIView * view = [UIView new];
    view.frame = CGRectMake(0, 0, 100, 50);
    view.autoresizesSubviews = YES;
    view.backgroundColor = [UIColor whiteColor];
    view.layer.borderWidth = 0.5;
    view.layer.borderColor = COLOR(204, 204, 204).CGColor;
    view.layer.cornerRadius = 5;
    view.exclusiveTouch = YES;
    
    UITextField * testField = [UITextField new];
    testField.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    testField.textColor = [UIColor blackColor];
    testField.borderStyle = UITextBorderStyleNone;
    testField.autocorrectionType = UITextAutocorrectionTypeNo;
    [view addSubview:testField];

   return view;
}

Потом у нас есть какойто контроллер

- (void)viewDidLoad {
    [super viewDidLoad];

    textField = [[MyClass createTextField:@"CITY, STATE OR ZIP"] subviews][0];
    textField.returnKeyType = UIReturnKeySearch;
    textField.delegate = (id<UITextFieldDelegate>)self;
    [self.view addSubview:textField.superview];
}

На iOS 8.4 на устройстве текстфилд не будет отображаться
Нужно делать так:

UIView * v = [MyClass createTextField:@"CITY, STATE OR ZIP"];
textField = [v subviews][0];
[self.view addSubview:textField.superview];

Запостил: COCOK-MAMOHTA COCOK-MAMOHTA, (Updated )

Комментарии (14) RSS

  • > На iOS 8.4 на устройстве текстфилд не будет отображаться
    ARC успевает выпилить view вместе с textfield'ом до того, как ты вытащишь из него textfield?
    Ответить
      • А вот такой код разве не прокатит?
        UIView * v = [MyClass createTextField:@"CITY, STATE OR ZIP"];
        textField = [v subviews][0];
        // some work with textfield
        [self.view addSubview:v];
        Имхо, наглядней.

        P.S. Хотя, по-хорошему, вообще не стоит копаться в кишках того View... Нарушение инкапсуляции и всё такое.
        Ответить
        • Читай комментарий к говнокоду. Я такой пример и написал. Такой будет работать
          Ответить
          • Ты написал: [self.view addSubview:textField.superview];
            А я спрашивал про более очевидное: [self.view addSubview:v];
            Ответить
            • Ааа ... это уже не важно ... и так и так будет работать ... потому что
              UIView * v = [MyClass ... делает ratain
              Ответить
              • Ну мне вот всё-таки не нравится, что код копается в кишках компонента... Достаёт оттуда какой-то textView (откуда он знает, что там вообще есть textView, а тем более - именно первым чилдом?), потом что-то в нём настраивает...

                Может быть вместо абстрактного UIView вернуть что-то своё и добавить методы для настройки делегата и returnKeyType?

                Исходная проблема же именно из-за этого черезжопного доступа к textView и возникла 🙂
                Ответить
                    • Можно ... но в этом и суть говнокода ) ... если функционал примитивен как в данном случае, имеет ли смысл создавать на это отдельный класс а тем более с новых файлах?
                      Ответить
                      • Вай нот? Код же проще и понятней станет. Да и второй раз можно заюзать этот класс, если на другой форме понадобится.

                        P.S. Или у вас в обжектив си классы так сложно создаются, что на это уходит больше пары минут?
                        Ответить
                          • По мотивам Симулы создали кресты, а Обжектив создали по мотивам Смоллтолка. Он как раз и славился «сложным» созданием объектов, если я ничего не путаю.
                            Ответить
                            • При создании класса Алану Кею на почту приходит уведомление, и пока он не одобрит - никакой компиляции
                              Ответить

Добавить комментарий

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8