Тема 1: Сигнал Sigbert при попытке представить другой контроллер View [дубликат]

Используйте функцию callback() внутри успеха foo(). Попробуйте таким образом. Это просто и легко понять. & nbsp;

var lat = "";
var lon = "";
function callback(data) {
    lat = data.lat;
    lon = data.lon;
}
function getLoc() {
    var url = "http://ip-api.com/json"
    $.getJSON(url, function(data) {
        callback(data);
    });
}

getLoc();
40
задан ravron 28 April 2015 в 18:15
поделиться

4 ответа

Сбой показывает вам явно, что не так:

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

Если вы проверьте документацию Apple для UICollectionView , вы обнаружите, что единственным инициализатором является initWithFrame:collectionViewLayout:. Кроме того, в параметрах для этого инициализатора вы увидите:

frame

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

layout

Объект макета, используемый для организации элементов. В представлении коллекции хранится сильная ссылка на указанный объект. Не должно быть nil.

Я выделил важную часть. Вы должны использовать initWithFrame:collectionViewLayout: для инициализации вашего UICollectionView, и вы должны передать ему объект non-nil UICollectionViewLayout.


. Один из способов исправить это - просто изменить порядок инициализации:

UICollectionViewFlowLayout* flowLayout = [[UICollectionViewFlowLayout alloc] init];
flowLayout.itemSize = CGSizeMake(100, 100);
[flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
self.collectionView = [[UICollectionView alloc] initWithFrame:self.view.frame collectionViewLayout:flowLayout];
[self.collectionView registerClass:[UICollectionViewCell class] forCellWithReuseIdentifier:@"cell"];

Обратите внимание, что в приведенном выше примере я предположил, что вы хотите использовать self.view.frame в качестве кадра self.collectionView. Если это не так, вставьте любой кадр, который вы хотите.

57
ответ дан mylogon 23 August 2018 в 22:30
поделиться

Swift 3.0 и Swift 4.0

UICollectionView

Приложение разбилось, как только оно было запущено, когда UICollectionView инициализирован

инициализируется как ниже (выше viewDidLoad)

let alarmCollectionView:UICollectionView = UICollectionView(frame: CGRect.zero, collectionViewLayout: UICollectionViewFlowLayout.init())
let layout:UICollectionViewFlowLayout = UICollectionViewFlowLayout.init()

В методе (внутри viewDidLoad)

layout.scrollDirection = UICollectionViewScrollDirection.vertical
alarmCollectionView.setCollectionViewLayout(layout, animated: true)
alarmCollectionView.delegate = self
alarmCollectionView.dataSource = self
alarmCollectionView.backgroundColor = UIColor.clear
self.addSubview(alarmCollectionView)

Хорошо работал после инициализации. Я использую Autolayout, используя CGRect.zero или использую свой собственный CGRect

UICollectionViewController

. Если вы используете UICollectionViewController вместо UICollectionView вам нужно добавить макет при инициализации

 let  testNavController:UINavigationController = UINavigationController.init()
 let layout:UICollectionViewFlowLayout = UICollectionViewFlowLayout.init() 
 let collectionView:UICollectionViewController = UICollectionViewController.init(collectionViewLayout:layout )              
 testNavController.pushViewController(collectionView, animated: true)
17
ответ дан Koushik 23 August 2018 в 22:30
поделиться

not setCollectionViewLayout понравилось: [self.collectionView setCollectionViewLayout: flowLayout]; попробуйте установить, когда init: [[UICollectionView alloc] initWithFrame: коллекция кадровViewLayout: defaultLayout];

0
ответ дан Semyon 23 August 2018 в 22:30
поделиться

Только быстрая версия ответа Райли Аврона

    let layout = UICollectionViewFlowLayout()
    layout.itemSize = CGSizeMake(100, 100)
    let collectionView = UICollectionView(frame: CGRectZero, collectionViewLayout: layout)
    self.view.addSubview(collectionView)
    collectionView.delegate   = self
    collectionView.dataSource = self
    collectionView.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: "cellIdentifier")
15
ответ дан William Hu 23 August 2018 в 22:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: