Я корейский разработчик Android и новичок в Swift.
Я перевожу свое приложение для Android на ios, но у меня проблема с интерфейсом и слушателем. Я не знаю, как реализовать слушателя для связи между пользовательским представлением и контроллером представления.
У меня есть пользовательское представление (т. Е. MyView), которое имеет две кнопки и у каждой есть своя функция.
В Android (с Java) я обычно делаю интерфейс слушателя в MyView и назначаю две функции, такие как void func1 (String val1) и func2 ...
public class MyView extends RelativeLayout {
private Button b1, b2;
private String val1, val2;
public interface OnButtonListener {
void onFunc1(String val1);
void onFunc2(String val2);
}
private OnButtonListener onButtonListener;
public void setOnButtonListener( OnButtonListener onButtonListener ) {
this.onButtonListener = onButtonListener;
}
public MyView( Context context, AttributeSet attrs ) {
super( context, attrs );
b1.setOnClickListener( view -> {
if (onButtonListener != null){
onButtonListener.onFunc1( val1 );
}
} );
b2.setOnClickListener( view -> {
if (onButtonListener != null){
onButtonListener.onFunc1( val2 );
}
} );
}
}
public class MyActivity extends Activity {
MyView myView1, myView2;
@Override
protected void onCreate( @Nullable Bundle savedInstanceState ) {
super.onCreate( savedInstanceState );
myView1.setOnButtonListener( new MyView.OnButtonListener() {
@Override
public void onFunc1( String val1 ) {
Log.d(TAG, val1);
}
@Override
public void onFunc2( String val2 ) {
Log.d(TAG, val2);
}
} );
myView2.setOnButtonListener( new MyView.OnButtonListener() {
@Override
public void onFunc1( String val1 ) {
// do something1
}
@Override
public void onFunc2( String val2 ) {
// do something2
}
} );
}
}
Этот код работает отлично, как я хотел. Поэтому я попытался применить тот же шаблон в Swift, но не смог найти никакого способа сделать это.
ниже для быстрой 4
import Foundation
import UIKit
import SnapKit
protocol OnButtonListener {
func onButton1( _ val1: String )
func onButton2( _ val2: String )
}
class MyView: UIView {
var onButtonListener: OnButtonListener?
var val1 = "abc"
var val2 = "123"
override init( frame: CGRect ) {
super.init( frame: frame )
let b1 = UIButton()
let b2 = UIButton() // i'm using snapkit
b1.addTarget(self, action: #selector(onB1), for: .touchUpInside)
b2.addTarget(self, action: #selector(onB2), for: .touchUpInside)
}
@objc func onB1() {
if onButtonListener != nil {
onButtonListener!.onButton1(val1 )
}
}
@objc func onB2() {
if onButtonListener != nil {
onButtonListener!.onButton2(val2 )
}
}
}
class MyVC : UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let myView1 = MyView()
let myView2 = MyView()
myView1.onButtonListener = {
// ???
}
myView2.onButtonListener = {
// ???
}
}
}
Я не знаю, как реализовать слушателя во ViewContorller. Я пробовал так же, как Котлин, но я тоже не работал. Спасибо за чтение.