如何保存一个被选中的UIButton(显示选中标记)并将其加载到iOS中?

时间:2018-06-30 03:26:08

标签: ios swift nsuserdefaults

我是一个初学者,以下是我到目前为止拥有的代码。单击按钮时,它将在复选标记和空白框之间切换(很好)。但是,退出应用程序时,该按钮不会保存被选中的状态(选中标记)。

我的所有代码都已附上,以便您可以清楚地看到正在发生的事情。

 public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final ConstraintLayout clMessagesContainer = (ConstraintLayout) findViewById(R.id.clMessagesContainer);
        final EditText txtMessage = (EditText) findViewById(R.id.txtMessage);
        Button btnSendL = (Button) findViewById(R.id.btnSendL);
        Button btnSendR = (Button) findViewById(R.id.btnSendR);

        btnSendL.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {

                TextView lblNxtMessage = new TextView(MainActivity.this);
                lblNxtMessage.setId(View.generateViewId());
                lblNxtMessage.setLayoutParams(new ConstraintLayout.LayoutParams(
                        ConstraintLayout.LayoutParams.WRAP_CONTENT,
                        ConstraintLayout.LayoutParams.WRAP_CONTENT));

                lblNxtMessage.setText(txtMessage.getText().toString());
                clMessagesContainer.addView(lblNxtMessage);

                ConstraintSet csL = new ConstraintSet();
                csL.clone(clMessagesContainer);
                csL.connect(lblNxtMessage.getId(), ConstraintSet.LEFT, ConstraintSet.PARENT_ID, ConstraintSet.LEFT, 0);
                csL.connect(lblNxtMessage.getId(), ConstraintSet.TOP, ConstraintSet.PARENT_ID, ConstraintSet.TOP, 0);
                csL.applyTo(clMessagesContainer);

            }
        });

        btnSendR.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {

                TextView lblNxtMessage = new TextView(MainActivity.this);
                lblNxtMessage.setId(View.generateViewId());
                lblNxtMessage.setLayoutParams(new ConstraintLayout.LayoutParams(
                        ConstraintLayout.LayoutParams.WRAP_CONTENT,
                        ConstraintLayout.LayoutParams.WRAP_CONTENT));

                lblNxtMessage.setText(txtMessage.getText().toString());
                clMessagesContainer.addView(lblNxtMessage);

                ConstraintSet csR = new ConstraintSet();
                csR.clone(clMessagesContainer);
                csR.connect(lblNxtMessage.getId(), ConstraintSet.RIGHT, ConstraintSet.PARENT_ID, ConstraintSet.RIGHT, 0);
                csR.connect(lblNxtMessage.getId(), ConstraintSet.TOP, ConstraintSet.PARENT_ID, ConstraintSet.TOP, 0);
                csR.applyTo(clMessagesContainer);
            }
        });
    }
}

video of what is happening

1 个答案:

答案 0 :(得分:0)

直接提供图片名称,我测试了答案是否有效

override func viewDidLoad() {
        super.viewDidLoad()

        if UserDefaults.standard.bool(forKey: "checkBoxSave01") == true {
            checkBoxButton1.setImage(#imageLiteral(resourceName: "id"), for: .normal)

        }else{
            checkBoxButton1.setImage(#imageLiteral(resourceName: "phone"), for: .normal)
        }
    }
    var isFirstClick = true
    @IBAction func checkBoxTapped(_ sender: UIButton) {
        if isFirstClick{
            checkBoxButton1.setImage(#imageLiteral(resourceName: "id"), for: .normal)
            UserDefaults.standard.set(true, forKey: "checkBoxSave01")
            ifFirstClick = false
        }else{
            checkBoxButton1.setImage(#imageLiteral(resourceName: "phone"), for: .normal)
            UserDefaults.standard.set(false, forKey: "checkBoxSave01")
            isFirstClick = true
        }

    }

单击按钮checkBoxSave01之前,键值将为true,直到删除该应用程序为止。