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"];
}
}
Ответы
Ответ 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!. Это решило проблему для меня.