Подтвердить что ты не робот

Segues инициируется непосредственно из предупреждения диспетчера представлений в xcode раскадровки

Привет, я создал кнопку программно, и я подключил ее к другому виду, но я получил предупреждение segue

что я должен использовать метод prepareForSegue для раскадровки, но я не знаю, как, есть несколько примеров в Интернете, но я получаю сообщение об ошибке, когда я использовал этот образец, не могли бы вы мне помочь?

вот мой код

Кнопка создания

 UIButton * button = [UIButton buttonWithType:UIButtonTypeCustom]; 
 button.backgroundColor=[UIColor colorWithRed: 201.0/255.0 green: 201.0/255.0 blue:201.0/255.0 alpha: 1.0];
 button.tag = currentTag;
 currentTag++;
 [button.layer setBorderColor: [[UIColor blackColor] CGColor]];
 [button.layer setBorderWidth: 1.0];
 [button setTitle:[NSString stringWithFormat:@"%d",currentTag] forState:UIControlStateNormal];
 button.frame = CGRectMake(80*x, 32*y, 80, 32); 
 [button addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside];
 [buttonView addSubview: button];

Действие для кнопки

-(void)buttonPressed:(UIButton *)button
{
    NSLog(@"button %u -- frame: %@", button.tag, NSStringFromCGRect(button.frame));
    [self performSegueWithIdentifier:@"WeekView" sender:self];    
}

Подготовьтесь к segue MY Warning

Сегсы, инициированные непосредственно из контроллеров, должны иметь идентификатор для использования с - [UIViewController performSegueWithIdentifier: sender:]

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue identifier] isEqualToString:@"WeekView"]) {
        [segue.destinationViewController setTitle:@"WeekView"];
    }
}
4b9b3361

Ответ 1

Сегсы, инициированные непосредственно из контроллеров, должны иметь идентификатор для использования с - [UIViewController performSegueWithIdentifier:sender:]

Это предупреждение возникает, когда вы перетаскиваете segue непосредственно из контроллера просмотра в раскадровке (иначе, а не с помощью кнопки или любого элемента управления действием) и не вводите идентификатор (имя).

Вы должны предоставить им идентификатор, иначе нет возможности называть их программно..., что является единственной причиной, по которой вы могли бы связать такой сегмент.

В Xcode 8 вы должны нажать на предупреждение, чтобы раскадровка вывела нарушающий сегмент, чтобы вы могли добавить к нему имя.

Ответ 2

Это была решена моя проблема.

Перейдите в раскадровку > Проверьте, не изменились ли отношения по типу Push или Pop.

Выберите каждое отношение segue > Свойства инспектора атрибутов проверки > Раздел Segue раскадровки

В этом разделе укажите идентификатор для всех сегментов.

enter image description here

Ответ 3

В Xcode 5 я сделал это предупреждение упущенным, назвав не только segues, но и контроллеры представлений, к которым они ведут - каждому контроллеру представления нужен идентификатор раскадровки. Если вы только назовите segues, это (вводящее в заблуждение) предупреждение все равно появится.

Ответ 4

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

Xcool. У меня тоже была эта проблема, когда мы смотрели на старый проект. Мне нужно было щелкнуть по каждому из разделов раскадровки и проверить, происходит ли это из контроллера вида. Если это так, я даю ему идентификатор.

Также проверьте ваши разматывать segues!. Это решило проблему для меня.