import common = require("./search-bar-common"); import dependencyObservable = require("ui/core/dependency-observable"); import proxy = require("ui/core/proxy"); import color = require("color"); import types = require("utils/types"); function onTextPropertyChanged(data: dependencyObservable.PropertyChangeData) { var bar = data.object; bar.ios.text = data.newValue; } (common.SearchBar.textProperty.metadata).onSetNativeValue = onTextPropertyChanged; function onTextFieldBackgroundColorPropertyChanged(data: dependencyObservable.PropertyChangeData) { var bar = data.object; if (data.newValue instanceof color.Color) { var tf = (bar)._textField; if (tf) { tf.backgroundColor = data.newValue.ios; } } } (common.SearchBar.textFieldBackgroundColorProperty.metadata).onSetNativeValue = onTextFieldBackgroundColorPropertyChanged; function onTextFieldHintColorPropertyChanged(data: dependencyObservable.PropertyChangeData) { // This should be in a Try Catch in case Apple eliminates which ever method in the future; try { // TODO; convert this code into NativeScript Code /* if ([textField respondsToSelector:@selector(setAttributedPlaceholder:)]) { textField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:textField.placeholder attributes:@{NSForegroundColorAttributeName: [UIColor whiteColor]}]; } */ } catch (Err) { // Do Nothing } } (common.SearchBar.textFieldHintColorProperty.metadata).onSetNativeValue = onTextFieldHintColorPropertyChanged; function onHintPropertyChanged(data: dependencyObservable.PropertyChangeData) { var bar = data.object; if (!bar.ios) { return; } var newValue = data.newValue; if (types.isString(newValue)) { bar.ios.placeholder = newValue; } } (common.SearchBar.hintProperty.metadata).onSetNativeValue = onHintPropertyChanged; global.moduleMerge(common, exports); class UISearchBarDelegateImpl extends NSObject implements UISearchBarDelegate { public static ObjCProtocols = [UISearchBarDelegate]; private _owner: WeakRef; private _searchText: string; public static initWithOwner(owner: WeakRef): UISearchBarDelegateImpl { let delegate = UISearchBarDelegateImpl.new(); delegate._owner = owner; return delegate; } public searchBarTextDidChange(searchBar: UISearchBar, searchText: string) { let owner = this._owner.get(); if (!owner) { return; } owner._onPropertyChangedFromNative(common.SearchBar.textProperty, searchText); // This code is needed since sometimes searchBarCancelButtonClicked is not called! if (searchText === "" && this._searchText !== searchText) { owner._emit(common.SearchBar.clearEvent); } this._searchText = searchText; } public searchBarCancelButtonClicked(searchBar: UISearchBar) { searchBar.resignFirstResponder(); let owner = this._owner.get(); if (!owner) { return; } owner._emit(common.SearchBar.clearEvent); } public searchBarSearchButtonClicked(searchBar: UISearchBar) { searchBar.resignFirstResponder(); let owner = this._owner.get(); if (!owner) { return; } owner._emit(common.SearchBar.submitEvent); } } export class SearchBar extends common.SearchBar { private _ios: UISearchBar; private _delegate; private __textField: UITextField; constructor() { super(); this._ios = new UISearchBar(); this._delegate = UISearchBarDelegateImpl.initWithOwner(new WeakRef(this)); } public onLoaded() { super.onLoaded(); this._ios.delegate = this._delegate; } public onUnloaded() { this._ios.delegate = null; super.onUnloaded(); } public dismissSoftInput() { (this.ios).resignFirstResponder(); } get ios(): UISearchBar { return this._ios; } get _textField(): UITextField { if (!this.__textField) { this.__textField = this.ios.valueForKey("searchField"); } return this.__textField; } }