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

Кнопки UIView, загруженные с XIB, не работают

Я загрузил UIView (FirstView.m) с отдельным XIB (SecondView.xib), но кнопки в этом XIB приводят к сбою приложения. Код для кнопок (IBOutlet и IBAction) находится в SecondView.m.

Мне нужно указать код с SecondView.m на FirstView.m? Я пробовал использовать #import и @class ... но безуспешно.

Код, который я использую, полностью действителен ... Я почти уверен, что проблема как-то связана с тем, что XIB загружается в UIView ... и затем, возможно, теряет связь с файлом реализации. Мысли?

Заранее спасибо!

FirstView.h

#import <UIKit/UIKit.h>
@interface FirstView : UIViewController {
    IBOutlet UIView *SecondViewPopUP;
    IBOutlet UIButton *openBTN;
    }

@property (nonatomic, retain) UIView *SecondViewPopUP;
@property (nonatomic, retain) IBOutlet UIButton *openBTN;
-(IBAction)showPopUp:(id)sender;

FirstView.m

@synthesize SecondViewPopUP;
@synthesize openBTN

- (void)viewDidLoad {
    SecondViewPopUP.alpha = 0;

    // Add IncidentsViewController to view
    SecondView *SecondV=[[SecondView alloc] init];
    SecondV.view.frame = CGRectMake(0, 0, 262, 269);
    SecondV.view.clipsToBounds = YES;
    [SecondViewPopUP addSubview:SecondV.view];
    SecondViewPopUP.frame = CGRectMake(0, 76, 262, 269);
    [SecondV release];
    }

-(IBAction)showPopUp:(id)sender {
    NSLog(@"Stats Button was pressed");

    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.4];

    SecondViewPopUP.alpha = 1;

    [UIView commitAnimations];
    }

SecondView.h

#import <UIKit/UIKit.h>

@interface ShareViewController : UIViewController {
    IBOutlet UIButton *share_facebook;
    IBOutlet UIButton *share_twitter;
    }

@property (nonatomic, retain) IBOutlet UIButton *share_facebook;
@property (nonatomic, retain) IBOutlet UIButton *share_twitter;

-(IBAction)shareOnFB:(id)sender;
-(IBAction)shareOnTwitter:(id)sender;

SecondView.m

@synthesize share_twitter, share_facebook;
- (void)viewDidLoad {
    [super viewDidLoad];
    }

-(IBAction)shareOnFB:(id)sender {
    NSLog(@"Shared on FB");
    }

-(IBAction)shareOnTwitter:(id)sender {
    NSLog(@"Shared on Twitter");    
    }
27.07.2011

  • Добавлено ... большая часть подделана ... Я не хотел копировать весь свой код ... но это важные вещи. 28.07.2011
  • попробуйте NS Logging выходов для кнопок, убедитесь, что это не ноль 28.07.2011
  • Что делает линия [SecondViewPopUP SecondV.view]? Название метода почему-то отсутствует, верно? Было бы полезно, если бы вы предоставили нам более подробную информацию, например журналы ошибок. 28.07.2011
  • Они не регистрируются как nil ... Все кнопки подключены в разделе Interface Builder Xcode. 28.07.2011
  • Привет, Дэвид ... это была опечатка ... в нем должен быть addSubview. Все исправлено. Я возьму журналы ошибок. 28.07.2011
  • Никаких журналов ошибок, кроме правил-загрузки-правил общей библиотеки все Текущий язык: авто; в настоящее время objective-c (gdb) ... он вылетает с потоком 1: программа получила сигнал: 'EXC_BAD_ACCESS'. 28.07.2011
  • Код, который я использую, полностью действителен ... Я почти уверен, что он имеет какое-то отношение к XIB, загружаемому в UIView ... но теряющему связь с файлом реализации. 28.07.2011

Ответы:


1

Во-первых, FirstView (и, предположительно, SecondView) - это UIViewController, а не UIView, поэтому называть его "FirstViewController" было бы намного яснее. Представления и контроллеры представлений - это разные вещи.

Во-вторых, вы добавляете представление UIViewController как подпредставление другого представления в строке «[SecondViewPopUP addSubview: SecondV.view];» Это не то, как предполагается использовать UIViewControllers и Руководство по программированию UIViewController не рекомендует это делать по уважительной причине.

Каждый созданный вами объект настраиваемого контроллера представления отвечает за управление всеми представлениями в единой иерархии представлений. В приложениях iPhone представления в иерархии представлений обычно покрывают весь экран, но в приложениях iPad они могут покрывать только часть экрана. Однозначное соответствие между контроллером представления и представлениями в его иерархии представлений является ключевым моментом при проектировании. Вы не должны использовать несколько настраиваемых контроллеров представлений для управления разными частями одной и той же иерархии представлений. Точно так же вы не должны использовать один настраиваемый объект контроллера представления для управления содержимым нескольких экранов.

Наконец, если бы вы опубликовали указанную ошибку при сбое вашего приложения, мы, вероятно, увидели бы, что вы пытаетесь отправить -shareOnFB: или -shareOnTwitter: сообщения экземпляру «FirstView», который не реализует их, потому что привязки пера не настроены должным образом, т. Е. Вы установили Владелец файла пера должен быть «SecondView», а затем загрузить его с экземпляром «FirstView» в качестве его владельца. Без дополнительных данных сказать наверняка невозможно.

28.07.2011
  • Спасибо, Джона ... ты прав насчет контроллеров представления. Вот мой вопрос: как вы порекомендуете мне поддерживать хорошее использование? Я хочу, чтобы при нажатии кнопки появлялось всплывающее окно (не закрывающее весь экран). Как лучше всего это заполнить? 28.07.2011
  • Кроме того, после сбоя моя консоль считывает sharedlibrary apply-load-rules все Текущий язык: auto; в настоящее время objective-c (gdb) ... он также вылетает с потоком 1: программа получила сигнал: 'EXC_BAD_ACCESS'. 28.07.2011
  • У вас может быть представление, которое не имеет собственного экземпляра UIViewController для управления им. Просто создайте представление (загрузив его из пера с помощью UINib, если это удобно) и добавьте его как подпредставление. Если у вас есть логика уровня контроллера, специфичная для этого представления, создайте для него класс контроллера, но этот контроллер может наследовать от NSObject, а не от UIViewController. См. Примечание: в связанном разделе руководства по программированию UIViewController. 28.07.2011
  • Спасибо, Иона! Я ценю помощь. 28.07.2011
  • Последний вопрос: если я загружу представление с помощью NIB, будет ли этот NIB по-прежнему подключен к контроллеру представления? Или он будет стоять сам по себе? 28.07.2011
  • Когда перо загружено, оно пытается установить любые содержащиеся в нем соединения. Эти соединения обычно связаны с прокси-сервером владельца файла, и вы определяете, какой объект, если он есть, будет владельцем файла, когда вы загружаете перо. UIViewController -initWithNibNamed: bundle: передаст UIViewController в качестве владельца файла. UINib и UIBundle позволяют указать объект в качестве владельца файла при загрузке пера. 28.07.2011
  • Новые материалы

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

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

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

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

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

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

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