Я реализовал метод делегата iOS, он работал на начальном этапе - PullRequest
0 голосов
/ 07 февраля 2019

Собственная версия скрипта 5.1.1

Xcode 10 и выше, Mojave OS

Функция загрузки SearchBar

//Delegate Method Call
let delegate = MallSearchDelegate.initWithOriginalDelegate((<any>this.searchbar)._delegate);
(<any>this.searchbar)._delegate = delegate;

Класс делегата

export class MallSearchDelegate extends NSObject{
public static ObjCProtocols = [UISearchBarDelegate];
private _originalDelegate:UISearchBarDelegate;

public static initWithOriginalDelegate(originalDelegate: UISearchBarDelegate):MallSearchDelegate{
    let delegate = <MallSearchDelegate>MallSearchDelegate.new();
    delegate._originalDelegate = originalDelegate;
    console.log("Initialized SearchBar");
    return delegate;
}

public searchBarTextDidEndEditing(searchBar: UISearchBar):void{ 
    console.log("endSearch");
    if(((<any>this._originalDelegate)._owner)!=undefined){
        const owner = (<WeakRef<SearchBar>>(<any>this._originalDelegate)._owner).get();
        if (owner) {
            owner.notify({
                object: owner,
                eventName: "endSearch",
                focusable:false
            });
        }
    } 
}

public searchBarTextDidBeginEditing(searchBar: UISearchBar):void{ 
    console.log("beginSearch");
    if(((<any>this._originalDelegate)._owner)!=undefined){
        const owner = (<WeakRef<SearchBar>>(<any>this._originalDelegate)._owner).get();
        if (owner) {
            owner.notify({
                object: owner,
                eventName: "beginSearch",
                focusable:true
            });
        }
    }
}

public searchBarSearchButtonClicked(searchBar: UISearchBar) {
    console.log("onSubmit");
    searchBar.resignFirstResponder();
    if(((<any>this._originalDelegate)._owner)!=undefined){
    const owner = (<WeakRef<SearchBar>>(<any>this._originalDelegate)._owner).get();
        if (owner) {
            owner.notify({ 
                object: owner,
                eventName: "submit"
            });
        }
    }
}

Перейдите на другую страницу и вернитесь на страницу, когда пользователь нажимает на строку поиска, в приложении произошел сбой.

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

...