Nano Hash - криптовалюты, майнинг, программирование

Пользовательский UIView для отображения метки на многих ViewController?

Я новичок в Objective-C, и это вопрос новичка. Я пишу приложение, которое имеет эту нестандартную метку во многих представлениях. (редактировать) Метка состоит из двух частей: основная метка, которая действует как заголовок, и меньшая подметка с коротким текстом. (/edit) Кажется глупым ставить метки вручную на все представления, поэтому я начал думать о создании пользовательского элемента управления, состоящего из двух меток: mainLabel и subLabel. Я не уверен, какой подход лучше здесь. Должен ли я сделать собственный UIView или есть лучший способ сделать это?

Если настройка UIView является правильным способом, как мне настроить метки? Является ли создание делегата протокола, который заставит ViewController реализовать методы инициализации управления метками, правильным способом сделать это?

РЕДАКТИРОВАТЬ: Как мне повторно использовать пользовательский UIView, поэтому позже, когда изменится стиль меток, мне не нужно менять внешний вид каждого из них отдельно, но иметь какой-то шаблон o, который будет использоваться каждый раз, когда используется пользовательский UIView

Я помещу здесь ответ для тех, у кого возникнет такой же вопрос:

Вы должны использовать пользовательский UIView для управления установкой меток (см. ответ ниже) вместе с файлом .xib, который будет определять шаблон для внешнего вида метки. Если вас интересуют файлы UIView и .xib, ознакомьтесь с этим: Как использовать xib и подкласс UIView вместе?

Спасибо за вашу помощь!


  • Требуется больше деталей. Что такого необычного в этикетке? 26.01.2014
  • Ничего особенного. У него всегда есть две нормальные метки с определенным положением и видом. Я просто не уверен, что это не изменится глобально. Изменение каждого представления вручную было бы болью... 26.01.2014
  • Ваш вопрос еще далеко не ясен. Помимо текста на этикетке, что конкретно вы хотите изменить в этих этикетках? 26.01.2014
  • Расположение меток на каждом из пользовательских UIViews, например 26.01.2014
  • Хорошо, я думаю, что файл .xib — это то, что мне нужно. Спасибо, нгриф. 26.01.2014

Ответы:


1

Вам не нужно отношение делегата, чтобы просто установить пару текстовых меток. Если вы хотите создать подкласс UIView для представления с двумя метками и просто добавить это представление в свои контроллеры представления, то в своем подклассе представления выберите метод, который будет похож на метод UILabel setText:. Просто нужно принять два аргумента.

Итак, если mainLabel и subLabel являются свойствами UILabel в файле .m вашего UIView подкласса, вы можете сделать что-то вроде этого:

В файле .h подкласса UIView:

@interface DoubleLabelView

@property (nonatomic,strong) NSString *mainText;
@property (nonatomic,strong) NSString *subText;

- (void)setText:(NSString*)mainText subText:(NSString*)subText;

@end

А затем в файле .m:

@interface DoubleLabelView()

@property (nonatomic,strong) UILabel *mainLabel;
@property (nonatomic,strong) UILabel *subLabel;

@end

@implementation DoubleLabelView

- (void)setText:(NSString*)mainText subText:(NSString*)subText {
    self.mainText = mainText;
    self.subText = subText;
}

- (void)setMainText:(NSString*)mainText {
    _mainText = mainText;
    self.mainLabel.text = mainText;
}

- (void)setSubText:(NSString*)subText {
    _subText = subText;
    self.subLabel.text = subText;
}

Если позиции меток в пользовательском представлении постоянны, я бы рекомендовал просто использовать файл .xib, чтобы настроить именно то, как вы хотите, чтобы пользовательское представление выглядело. И я мог бы добавить собственный фабричный метод, который принимает аргументы manText и subText и тут же вызывает setText:subText:.

Если вы создаете подкласс UIView, чем больше кода, относящегося к представлению, вы можете содержать в подклассе, тем лучше.


Точно так же, как я добавил методы в UIView, чтобы позволить вам изменять mainText, subText или оба одновременно в одном вызове метода, вы можете продолжать добавлять методы, подобные этому, для изменения свойств вашего UIView.

Если вы хотите изменить расположение ярлыков, рассмотрите возможность добавления пары свойств CGPoint:

@property (nonatomic,assign) CGPoint mainLabelPosition;
@property (nonatomic,assign) CGPoint subLabelPosition;

- (void)setPosition:(CGPoint)mainPosition subPosition:(CGPoint)subPosition;

И напишите для них методы, подобные тем, которые я показал вам для изменения текста.

26.01.2014
  • Хорошо, я понял, но как мне поместить эту штуку на все вьюконтроллеры таким образом, чтобы мне не нужно было менять каждый из них позже при изменении стиля? 26.01.2014
  • Изменить то, что? Опять же, как я прокомментировал исходный вопрос, мне нужно гораздо больше деталей. Вы очень расплывчаты. 26.01.2014
  • Я спрашивал об этом в комментарии к вашему комментарию :) Я отредактирую вопрос 26.01.2014
  • Вы так и не указали, что именно вы хотите изменить. Метка — это элемент пользовательского интерфейса, который находится только в одном представлении. Он не должен быть изменен ничем, кроме контроллера представления, управляющего представлением, в котором оно находится. В элементе пользовательского интерфейса не должно быть ничего глобального. 26.01.2014

  • 2

    Создайте подкласс UIView, как показано ниже,

    Файл CustomView.h

    @interface CustomView : UIView
    @property UILabel *mainLabel;
    @property UILabel *subLabel;
    
    -(void)showMainLabelWithText:(NSString *)text;
    -(void)showSubLabel:(NSString *)text;
    
    @end
    

    Файл CustomView.m

    @implementation CustomView
    
    - (id)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
        if (self) {
            // Initialization code
        }
        return self;
    }
    -(void)showMainLabelWithText:(NSString *)text{
        self.mainLabel =[[UILabel alloc] init];
        self.mainLabel.text =text;
        [self addSubview:self.mainLabel];
    }
    -(void)showSubLabel:(NSString *)text{
        self.subLabel =[[UILabel alloc] init];
        self.subLabel.text =text;
        [self addSubview:self.subLabel];
    }
    
    26.01.2014
  • Это создаст два UILabels для использования, это круто, но как насчет макета? Как я могу автоматизировать это? 26.01.2014
  • mainLabel и subLabel являются общедоступными свойствами, просто установите их фрейм, например instance.mainLabel.frame =someFrame; 26.01.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..