CodeIgniter, like most PHP MVC frameworks, comes with a View "engine". In otherwords, there's a class in the framework responsible for loading and transferring data from your controller to the view.
Specific to CodeIgniter, those calls look like this:
$data = array(
'title' => 'My Title',
'heading' => 'My Heading',
'message' => 'My Message'
);
$this->load->view('blogview', $data);
Your view would then be a separate php page, in this case blogview.php
. It may look like this:
<html>
<head><title><?= $title ?></title></head>
<body>
<h2><?= $heading ?></h2>
<p><?= $message ?></p>
</body>
</html>
The part responsible for transferring the data between the controller and the view is the View engine (or class) internal to CodeIgniter. It takes that array from the controller and deserializes it for the view.
So why two separate files? The MVC paradigm is such that, by design, you want your business logic separated from your UI. You don't need to incorporate the Model part of MVC if you aren't doing much with a database. But it's there when you want to further separate the data access portions of your code from your business logic (the stuff that manipulates the data for the user). In that case, you've got your 3 separate files; model, controller, view.
So no, the components aren't all in the same page, though they certainly could be. But by structuring your program using MVC, you separate the operations of your application cleanly and neatly. That way, you can work in one layer at a time without effecting the other layers. Your CSS guy could be making the site look pretty while you figure out why the user can't log in, for example.